zoukankan      html  css  js  c++  java
  • 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]; 

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

  • 相关阅读:
    (转)在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 26 定位指定的服务器/实例时出错)
    C++面试题集(最全的C\C++试题集和答案)
    linq
    sqlserver 读取多个表的分页存储过程(参考)
    xml xslt linqxml
    .net 文件操作的一点记录
    HTTP压缩
    图片防盗链
    随笔
    datareader 与 应用程序池
  • 原文地址:https://www.cnblogs.com/AaronYang/p/2693822.html
Copyright © 2011-2022 走看看