第9章
ASP.
NET操作数据库
通过对ADO.NET的基本讲解,以及讲解了一些数据源控件的基本用法后,本章将介绍一些ASP.NET操作数据库的高级用法,包括使用SQLHelper,以及数据源控件对数据的操作.本章是对前面的数据库知识的一种补充和提升.
9.1使用ADO.NET操作数据库
上一章中介绍了ADO.NET的基本概念,ADO.NET的对象,以及如何使用ADO.NET.使用ADO.NET能够极大的方便开发人员对数据库进行操作而无需关心数据库底层之间的运行,ADO.NET不仅包括多个对象,同样包括多种方法,这些方法都可以用来执行开发人员指定的SQL语句,但是这些方法实现过程又不尽相同,本节将介绍ADO.NET中数据的操作方法.
9.1.1
使用ExecuteReader()操作数据库
使用ExecuteReader()操作数据库,ExecuteReader()方法返回的是一个SqlDataReader对象或OleDbDataReader对象.当使用DataReader对象时,不会像DataSet那样提供无连接的数据库副本,DataReader类被
设计为产生只读,只进的数据流.这些数据流都是从数据库返回的.所以,每次的访问或操作只有一个记录保存在服务器的内存中.相比与DataSet而言,DataReader具有较快的访问能力,并且能够使用较少的服务器资源.DataReader对象提供了"游标"形式的读取方法,当从结果中读取了一行,则"游标"会继续读取到下一行.通过Read方法可以判断数据是否还有下一行,如果存在数据,则继续运行并返回true,否则返回false.示例代码如下所示.
stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();//打开连接stringstr
sql="select*frommynews";//SQL
查询语句SqlCommandcmd=newSqlCommand(strsql,con);//初始化Command对象SqlDataReaderrd=cmd.ExecuteReader();//初始化DataReader对象while(rd.Read()){Response.Write(rd["title"].ToString());}
//通过索引获取列
DataReader可以提高执行效率,有两种方式可以提高代码的性能,一种是基于序号的查询;第二种情况则是使用适当的Get方法来查询.一般来说,在数据库的设计中,需要设计索引键或主键来标识,在主键的设计中,自动增长类型是经常使用的,自动增长类型通常为整型,所以基于序号的查询可以使用DataReader,示例代码如下所示.
stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();//设置连接字串//创建连接对象//打开连接
stringstrsql="select*frommynewswhereid=1orderbyiddesc";SqlCommandcmd=newSqlCommand(strsql,con);SqlDataReaderrd=cmd.ExecuteReader();while(rd.Read()){Response.Write(rd["title"].ToString());}
//按标识查询//创建Command对象//创建DataReader对象//遍历数据库//读取相应行的信息
当使用ExecuteReader()操作数据库时,会遇到知道某列的名称而不知道某列的号的情况,这种情况可以通过使用DataReader对象的GetOrdinal()方法获取相应的列号.此方法接收一个列名并返回此列名所在的列号,示例代码如下所示.
stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";//创建连接字串SqlConnectioncon=newSqlConnection(str);//创建连接对象con.Open();//打开连接stringstrsql="select*frommynewswhereid=1orderbyiddesc";//创建执行SQL语句SqlCommandcmd=newSqlCommand(strsql,con);//创建Command对象SqlDataReaderrd=cmd.ExecuteReader();//创建DataReader对象intid=rd.GetOrdinal("title");//使用GetOrdinal方法获取title列的列号while(rd.Read())//遍历DataReader对象{Label1.Text="新闻id是"+rd["id"];}//输出对象的值
当完成数据库操作时,需要关闭数据库连接,DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又打开另一个连接,
系统会抛出异常.示例代码如下所示.