三层代码敲完了,于是乎就信心满满的来找师父验收了,其实自己在敲D层时,代码不是很了解,就像机房数据库连接的代码自己理解的也不是很透彻,于是这次也没太理解这块代码,但师父就是问的这块代码,答的过程那叫一个心惊胆跳,其实还好。下面该段代码是有关数据库连接的,下文也是对该段代码的解释,里面可有好多知识点哟:
using(SqlConnection conn = new SqlConnection(DBUtil.ConnString))//创建一个数据库连接 { SqlCommand cmd = conn.CreateCommand();//创建一个与connection对象关联的SqlCommand对象,来执行命令文本 cmd.CommandText = @"select ID,UserName,Password,Email from Users where UserName=@UserName And Password=@Password"; cmd.CommandType = CommandType.Text; //因为连接字符串中有两个参数,所以要声明两个参数 cmd.Parameters.Add(new SqlParameter("@UserName",userName)); cmd.Parameters.Add(new SqlParameter("@Password",password)); conn.Open();//因为使用using,默认数据库关闭,所以在使用前要打开 SqlDataReader reader = cmd.ExecuteReader(); Login.Model.UserInfo user = null; while (reader.Read()) { if (user == null) { user = new Login.Model.UserInfo();//延迟加载 } user.ID = reader.GetInt32(0); user.UserName = reader.GetString(1); user.Password = reader.GetString(2); if (!reader.IsDBNull(3)) { user.Email = reader.GetString(3); } } return user;
Command.Text
它的内容通常是SQL语句,SQL存储过程
Command.Type
作用:设置CommandText的内容类型,有三种重载
1>StoredProcedure:类型为存储过程名称
2>TableDirect:类型为表的名称
3>Text:类型为SQL文本命令
ExecuteReader()方法
作用: 尽可能快的对数据库进行查询并得到结
返回值:是一个DataReader对象,如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OleDbCommand对象 中调用,则返回OleDataReader.以上代码就是在SqlCommand对象中调用的。每次调用SqlDataReader只会返回结果集中的一条记录。所以要想把符合条件的结果都读出来,以上代码用到了while循环。
方法: Read()是ExcuteReader()是DataReader的方法,每次调用SqlDataReader的Read()方法只会返回结果集中的一条记 录。所以要想把符合条件的结果都读出来,以上代码用到了while循环;返回类型为bool类型,在执行方法之前,指针指向第一 条记录的前面,每执行 一次指针向前移动一条,知道指针指向最后一条记录的后面,返回false
ExecuteNonQuery()
作用:返回符合查询条件的受影响的记录总行数
返回值:返回类型为int,如果是其它查询,则返回-1(如果用cmd.ExecuteNonQuery()代替cmd.ExecuteReader(),则返回值就是-1);如果是该 查询没有受影响的行,则返回0,否则返回受影响总条数
两者区别:
ExecuteReader()方法针对Select语句
ExecuteNonQuery()方法针对的是inset、delete、update语句