SubSnoic 框架入門到提高(3)---全程記錄


時隔上篇的2已經好久了,好多個人原因導致自己好久沒寫了,抱歉

還是接着上一篇寫吧

 

首先我們在上次的那個SubSonicTestDB 數據庫上執行下面Sql,給學生表添加一個入學日期列 

 alter table Student add EnterSchoolDate datetime default getdate() 

 

額外技巧: 教大家一個快速輸入時間的方法,開始這樣,我用搜狗輸入法

 例如

,在輸入中 ,輸入sj得到

 

 然后按3,就可以輸入當前時間了,如此添加一些測試數據。

 

 開始:

 3.1時間段查詢(BETWEEN_AND 方法)

      IDataReader dr = new Query(Tables.Student).BETWEEN_AND(Student.Columns.EnterSchoolDate, Convert.ToDateTime("2012-09-01 00:00:00"), DateTime.Now.AddDays(30)).ExecuteReader();

             while (dr.Read())
            {
                Console.WriteLine(dr[ " StudentId "] +  " \t " + dr[ " StudentName "] +  " \t " + dr[ " StudentHobby "]);
            }

 其他方式還有很多

 

3.2添加一個條件(AddWhere)

       IDataReader dr = new Query(Tables.Student).BETWEEN_AND(Student.Columns.EnterSchoolDate, Convert.ToDateTime("2012-09-01 00:00:00"), DateTime.Now.AddDays(30)).AddWhere(Student.Columns.StudentHobby,"中國象棋").ExecuteReader();

只是在3.1里面添加了一個是愛好是中國象棋的條件

 

3.3常用取前幾條數據的方法

  3.3.1 Top

               Query query = new Query("Student");

            query.Top =  " 8 ";
            query.SelectList =Student.Columns.StudentID+ " , "+Student.Columns.StudentName +  " , " + Student.StudentHobbyColumn.ToString();
            query.OrderBy = OrderBy.Desc(Student.Columns.StudentID);

            IDataReader dr = Student.FetchByQuery(query); 

 當然那個Query你也可以直接寫 Query query = new Query("Student").SetTop("10").ORDER_BY("StudentID desc"); 

 可能你會對Query這么麻煩感到煩惱,那我把上期某個例子放一下,不是Query類型的只能FetchByQuery這么局限,感受一下

            DataSet sts =  new Query(Tables.Student).WHERE( " StudentHobby "" 中國象棋 ").ORDER_BY( " StudentId asc ").ExecuteDataSet();
             foreach (DataRow item  in sts.Tables[ 0].Rows)
            {
                Console.WriteLine(item[ " StudentId "] +  " \t " + item[ " StudentName "] +  " \t " + item[ " StudentHobby "]);} 

   

 3.3.2 Query類型自帶的 PageIndex,PageSize屬性,我的理解是將結果分頁

              Query query = new Query("Student");

            query.PageIndex =  1;
            query.PageSize =  8;
            IDataReader dr = Student.FetchByQuery(query);
            Console.WriteLine( " 第一頁 ");
             while (dr.Read())
            {
                Console.WriteLine(dr[ " StudentId "] +  " \t " + dr[ " StudentName "] +  " \t " + dr[ " StudentHobby "]);
            }

            Console.WriteLine( " 第二頁 ");
            query.PageIndex =  2;
            dr= Student.FetchByQuery(query);
             while (dr.Read())
            {
                Console.WriteLine(dr[ " StudentId "] +  " \t " + dr[ " StudentName "] +  " \t " + dr[ " StudentHobby "]);
            }

 效果:

使用SQL Server Profiler跟蹤可以查看他在內部怎么執行的

 這里只列出一點點,自己有興趣可以看看

這個工具在sqlserver2008 的菜單欄 --”工具“--SQL SERVER Profiler,運行,直接下一步即可,存儲過程也可以跟蹤

 

 3.3.3其他分頁(Paged方法)

①查出張老師名下的學生,返回一個List類型的,如果你想返回更多的信息,建議用其他類型,例如DataSet 

   List<Student> students =  new Select(Student.StudentIDColumn,Student.StudentNameColumn,Student.StudentHobbyColumn,Student.EnterSchoolDateColumn).From<Student>().InnerJoin(Teacher.TeacherIDColumn,Student.TeacherIDColumn).Where(Teacher.TeacherNameColumn).IsEqualTo( " 張老師 ").Paged( 1, 3).ExecuteTypedList<Student>();
             foreach (Student item  in students)
            {
                Console.WriteLine( " {0}   {1}  {2} ",item.StudentID,item.StudentName,item.StudentHobby); }

             

 4.返回一個JOSN(ExecuteJSON )

             string studentsJOSN= new Select(Student.StudentIDColumn, Student.StudentNameColumn, Student.StudentHobbyColumn, Student.EnterSchoolDateColumn).From<Student>().InnerJoin(Teacher.TeacherIDColumn, Student.TeacherIDColumn).Where(Teacher.TeacherNameColumn).IsEqualTo("張老師").Paged(13).ExecuteJSON("stu","STUDENT");

 

效果圖

 

 

5.返回一個XML(ExecuteXML)

             string studentsXML = new Select(Student.StudentIDColumn, Student.StudentNameColumn, Student.StudentHobbyColumn, Student.EnterSchoolDateColumn).From<Student>().InnerJoin(Teacher.TeacherIDColumn, Student.TeacherIDColumn).Where(Teacher.TeacherNameColumn).IsEqualTo("張老師").Paged(13).ExecuteXML("Students","Student");

效果圖如下: 

 

 

6.添加一些條件

  6.1 模糊查詢

      模糊查詢,查出愛好含姓小的人的

       DataTable dt = new Select().From<Student>().WhereExpression("StudentName").StartsWith("").ExecuteDataSet().Tables[0];

             foreach (DataRow item  in dt.Rows)
            {
                Console.WriteLine(item[ 0] +  " \t " + item[ 1] +  " \t " + item[ 2]);}

       還有其他方法,例如EndsWith,Expression,AndExpression等

 

  6.2范圍查詢,IsBetweenAnd這個跟3.1的BETWEEN_AND不一樣,BETWEEN_AND必須是datetime范圍內的,IsBetweenAnd是兩個對象,包括時間

        DataTable dt = new Select().From<Student>().WhereExpression("StudentID").IsBetweenAnd(5,10).ExecuteDataSet().Tables[0]; 

 

 

暫時寫到這里 ,不知道你們有沒有學到什么...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM