一、使用DataReader读取为对象List
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /// <summary> /// 获得数据列表List<>,DataReader 使用参数的 /// </summary> /// <param name = "strWhere" >条件</param> /// <param name = "ht" >HashTable,保存参数名及参数对应的值</param> /// < returns >List<DotNet.Model.Base_Department></ returns > /// 使用方法:string str = "id=@id" ;Hashtable ht = new Hashtable();ht. Add ( "@id" , 10); public List<DotNet.Model.Base_Department> GetListUseDataReader(string strWhere, Hashtable ht= null ) { StringBuilder strSql = new StringBuilder(); strSql.Append( "Select Id,DepartmentName,NetCount,Remarks,CreatedOn,IsPublic,IsLock,SavedOn,LockVersion,Operator_Id from Base_Department" ); if(strWhere.Trim().Length!=0) { strSql.Append( " Where " + strWhere.Trim()); } //获取DataReader SqlDataReader reader; //组织参数 if (ht != null && ht. Count > 0) { SqlParameter[] parameters = new SqlParameter[ht. Count ]; int i = 0; foreach (DictionaryEntry dc in ht) { parameters[i] = new SqlParameter() ; parameters[i].ParameterName = dc. Key .ToString(); parameters[i].Value = dc.Value; i++; } reader = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters); } else reader = DbHelperSQL.ExecuteReader(strSql.ToString()); if (reader.HasRows) { List<DotNet.Model.Base_Department> list = new List<DotNet.Model.Base_Department>(); while (reader. Read ()) { DotNet.Model.Base_Department model = new DotNet.Model.Base_Department(); model.Id = reader.GetInt64(reader.GetOrdinal( "Id" )); model.DepartmentName = reader.GetString(reader.GetOrdinal( "DepartmentName" )); model.NetCount = reader.GetInt32(reader.GetOrdinal( "NetCount" )); model.Remarks = reader.GetString(reader.GetOrdinal( "Remarks" )); model.CreatedOn = reader.GetDateTime(reader.GetOrdinal( "CreatedOn" )); model.IsPublic = reader.GetBoolean(reader.GetOrdinal( "IsPublic" )); model.IsLock = reader.GetBoolean(reader.GetOrdinal( "IsLock" )); model.SavedOn = reader.GetDateTime(reader.GetOrdinal( "SavedOn" )); model.LockVersion = reader.GetInt32(reader.GetOrdinal( "LockVersion" )); model.Operator_Id = reader.GetInt64(reader.GetOrdinal( "Operator_Id" )); list. Add (model); } reader. Close (); return list; } else { reader. Close (); return null ; } } |
二、使用DataReader对象读取数据
2.1 DataReader对象简介
DataReader对象又称数据阅读器,是DBMS所特有的,常用来检索大量的数据。DataReader对象是以连接的方式工作,它只允许以只读、顺向的方式查看其中所存储的数据,并在ExecuteReader方法执行期间进行实例化。
根据.NET Framework数据提供程序不同,DataReader也可以分成SqlDataReader、OleDbDataReader等。DataReader与底层数据库密切相联,它实际上是一个流式的DataSet。可以参照下一节的DataSet对象与之比较学习,下面我们将着重介绍SqlDataReader。
2.2 SqlDataReader对象常用属性
SqlDataReader对象常用属性如下:
属 性 | 说 明 |
FieldCount | 获取当前行的列数 |
RecordsAffected | 获取执行SQL语句所更改、添加或删除的行数 |
表1 SqlDataReader对象常用属性
2.3 常用属性
SqlDataReader对象的常用属性。
l FieldCount属性
获取DataReader对象中有几行数据,默认值为-1。如果未放在有效的记录集中,属性值则为0;否则为当前行中的列数。
l RecordsAffected属性
直到所有的行都被读取并且数据阅读器已经关闭时,才设置RecordsAffected属性,其默认值为−1。该属性的值是累积值。例如,如果以批处理模式插入3个记录,则RecordsAffected属性的值将为3。
SqlDataReader对象常用方法
SqlDataReader对象常用方法如下:
方 法 | 说 明 |
Read | 使DataReader对象前进到下一条记录(如果有) |
Close | 关闭DataReader对象。注意,关闭阅读器对象并不会自动关闭底层连接 |
Get | 用来读取数据集的当前行的某一列的数据数据 |
表2 SqlDataReader对象常用方法
2.4 常用方法
SqlDataReader对象常用方法详解
l Read方法
语法:public override bool Read ()
返回值:如果存在多个行,则为True;否则为False。
DataReader对象中的Read()方法用来遍历整个结果集,不需要显示地向前移动指针,或者检查文件的结束,如果没有要读取的记录了,则Read方法会自动返回False。
注意:要使用SqlDataReader,必须调用SqlCommand对象的ExecuteReader()方法来创建,而不要直接使用构造函数。
SqlDataReader对象的应用
实例 使用SqlDataReader对象读取数据(源程序详见光盘中例6.6)
本示例主要讲解在ASP.NET应用程序中如何使用SqlDataReader对象读取数据库中的数据。执行程序,运行结果如图6.11所示:
图1 读取数据的结果图
程序实现的步骤:
(1)、新建一个网站,默认主页是Default.aspx。
(2)、在Web.Config文件中配置数据库连接字符串,在<configuration>下的子配置节<connectionStrings>添加连接字符串。
(3)、向Default.aspx页中添加一个label控件将其命名为lblStudent,在Page_Load中写下如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | protected void Page_Load( object sender, EventArgs e) { if (!IsPostBack) { SqlConnection myConn = GetConnection(); string sqlStr = "select * from tbStudent" ; //查询所有学生信息的SQL SqlCommand myCmd = new SqlCommand(sqlStr, myConn); //创建Command对象 try { myConn.Open(); //执行SQL语句,并返回DataReader对象 SqlDataReader myDr = myCmd.ExecuteReader(); //显示标题文字 this .lblStudent.Text = "   学号     姓名     性别     班级     系别<br>"; while (myDr.Read()) //循环读取结果集 { //读取数据库中的信息并显示在界面中 this .lblStudent.Text +=myDr[ "sno" ].ToString().Trim() + "    " + myDr[ "sname" ].ToString().Trim() + "      " + myDr[ "ssex" ].ToString().Trim() + "    " + myDr[ "sclass" ].ToString().Trim() + "    " +myDr[ "sdept" ].ToString().Trim() + "</br>" ; } myDr.Close(); //关闭DataReader } catch { Response.Write( "连接失败!" ); //异常处理 } finally { myConn.Close(); //关闭数据库连接 } } } |
参考文章
1. ,
2. 悠哲RHT,