SubSnoic 框架入门到提高---全程记录

时隔上篇的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 "]);
            }// http://www.heatpress123.net

 其他方式还有很多

 

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 "]);
            }
www.software8.co
            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]; 

 

 

暂时写到这里 ,不知道你们有没有学到什么...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值