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
<code>/// <summary></code>
<code>/// 获得数据列表List<>,DataReader 使用参数的</code>
<code>/// </summary></code>
<code>/// <param </code><code>name</code><code>=</code><code>"strWhere"</code><code>>条件</param></code>
<code>/// <param </code><code>name</code><code>=</code><code>"ht"</code><code>>HashTable,保存参数名及参数对应的值</param></code>
<code>/// <</code><code>returns</code><code>>List<DotNet.Model.Base_Department></</code><code>returns</code><code>></code>
<code>/// 使用方法:string str = </code><code>"id=@id"</code><code>;Hashtable ht = new Hashtable();ht.</code><code>Add</code><code>(</code><code>"@id"</code><code>, 10);</code>
<code>public</code> <code>List<DotNet.Model.Base_Department> GetListUseDataReader(string strWhere, Hashtable ht=</code><code>null</code><code>)</code>
<code>{</code>
<code> </code><code>StringBuilder strSql = new StringBuilder();</code>
<code> </code><code>strSql.Append(</code><code>"Select Id,DepartmentName,NetCount,Remarks,CreatedOn,IsPublic,IsLock,SavedOn,LockVersion,Operator_Id from Base_Department"</code><code>);</code>
<code> </code><code>if(strWhere.Trim().Length!=0)</code>
<code> </code><code>{</code>
<code> </code><code>strSql.Append(</code><code>" Where "</code> <code>+ strWhere.Trim());</code>
<code> </code><code>}</code>
<code> </code><code>//获取DataReader</code>
<code> </code><code>SqlDataReader reader;</code>
<code> </code><code>//组织参数</code>
<code> </code><code>if (ht != </code><code>null</code> <code>&& ht.</code><code>Count</code> <code>> 0)</code>
<code> </code><code>SqlParameter[] parameters = new SqlParameter[ht.</code><code>Count</code><code>];</code>
<code> </code><code>int</code> <code>i = 0;</code>
<code> </code><code>foreach (DictionaryEntry dc </code><code>in</code> <code>ht)</code>
<code> </code><code>{</code>
<code> </code><code>parameters[i] = new SqlParameter() ;</code>
<code> </code><code>parameters[i].ParameterName = dc.</code><code>Key</code><code>.ToString();</code>
<code> </code><code>parameters[i].Value = dc.Value;</code>
<code> </code><code>i++;</code>
<code> </code><code>}</code>
<code> </code><code>reader = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters);</code>
<code> </code><code>else</code>
<code> </code><code>reader = DbHelperSQL.ExecuteReader(strSql.ToString());</code>
<code> </code><code>if (reader.HasRows)</code>
<code> </code><code>List<DotNet.Model.Base_Department> list = new List<DotNet.Model.Base_Department>();</code>
<code> </code><code>while (reader.</code><code>Read</code><code>())</code>
<code> </code><code>DotNet.Model.Base_Department model = new DotNet.Model.Base_Department();</code>
<code> </code><code>model.Id = reader.GetInt64(reader.GetOrdinal(</code><code>"Id"</code><code>));</code>
<code> </code><code>model.DepartmentName = reader.GetString(reader.GetOrdinal(</code><code>"DepartmentName"</code><code>));</code>
<code> </code><code>model.NetCount = reader.GetInt32(reader.GetOrdinal(</code><code>"NetCount"</code><code>));</code>
<code> </code><code>model.Remarks = reader.GetString(reader.GetOrdinal(</code><code>"Remarks"</code><code>));</code>
<code> </code><code>model.CreatedOn = reader.GetDateTime(reader.GetOrdinal(</code><code>"CreatedOn"</code><code>));</code>
<code> </code><code>model.IsPublic = reader.GetBoolean(reader.GetOrdinal(</code><code>"IsPublic"</code><code>));</code>
<code> </code><code>model.IsLock = reader.GetBoolean(reader.GetOrdinal(</code><code>"IsLock"</code><code>));</code>
<code> </code><code>model.SavedOn = reader.GetDateTime(reader.GetOrdinal(</code><code>"SavedOn"</code><code>));</code>
<code> </code><code>model.LockVersion = reader.GetInt32(reader.GetOrdinal(</code><code>"LockVersion"</code><code>));</code>
<code> </code><code>model.Operator_Id = reader.GetInt64(reader.GetOrdinal(</code><code>"Operator_Id"</code><code>));</code>
<code> </code><code>list.</code><code>Add</code><code>(model);</code>
<code> </code><code>reader.</code><code>Close</code><code>();</code>
<code> </code><code>return</code> <code>list;</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
<code>}</code>
DataReader对象又称数据阅读器,是DBMS所特有的,常用来检索大量的数据。DataReader对象是以连接的方式工作,它只允许以只读、顺向的方式查看其中所存储的数据,并在ExecuteReader方法执行期间进行实例化。
根据.NET Framework数据提供程序不同,DataReader也可以分成SqlDataReader、OleDbDataReader等。DataReader与底层数据库密切相联,它实际上是一个流式的DataSet。可以参照下一节的DataSet对象与之比较学习,下面我们将着重介绍SqlDataReader。
SqlDataReader对象常用属性如下:
属 性
说 明
FieldCount
获取当前行的列数
RecordsAffected
获取执行SQL语句所更改、添加或删除的行数
表1 SqlDataReader对象常用属性
SqlDataReader对象的常用属性。
l FieldCount属性
获取DataReader对象中有几行数据,默认值为-1。如果未放在有效的记录集中,属性值则为0;否则为当前行中的列数。
l RecordsAffected属性
直到所有的行都被读取并且数据阅读器已经关闭时,才设置RecordsAffected属性,其默认值为−1。该属性的值是累积值。例如,如果以批处理模式插入3个记录,则RecordsAffected属性的值将为3。
SqlDataReader对象常用方法
SqlDataReader对象常用方法如下:
方 法
Read
使DataReader对象前进到下一条记录(如果有)
Close
关闭DataReader对象。注意,关闭阅读器对象并不会自动关闭底层连接
Get
用来读取数据集的当前行的某一列的数据数据
表2 SqlDataReader对象常用方法
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中写下如下代码:
<code>protected</code> <code>void</code> <code>Page_Load(</code><code>object</code> <code>sender, EventArgs e)</code>
<code> </code><code>if</code> <code>(!IsPostBack)</code>
<code> </code><code>SqlConnection myConn = GetConnection();</code>
<code> </code><code>string</code> <code>sqlStr = </code><code>"select * from tbStudent"</code><code>; </code><code>//查询所有学生信息的SQL</code>
<code> </code><code>SqlCommand myCmd = </code><code>new</code> <code>SqlCommand(sqlStr, myConn);</code><code>//创建Command对象</code>
<code> </code><code>try</code>
<code> </code><code>{</code>
<code> </code><code>myConn.Open();</code>
<code> </code><code>//执行SQL语句,并返回DataReader对象</code>
<code> </code><code>SqlDataReader myDr = myCmd.ExecuteReader();</code>
<code> </code><code>//显示标题文字</code>
<code> </code><code>this</code><code>.lblStudent.Text = "&nbsp&nbsp&nbsp学号</code>
<code> </code><code>&nbsp&nbsp&nbsp 姓名</code>
<code> </code><code>&nbsp&nbsp&nbsp 性别</code>
<code> </code><code>&nbsp&nbsp&nbsp 班级</code>
<code> </code><code>&nbsp&nbsp&nbsp 系别<br>";</code>
<code> </code><code>while</code> <code>(myDr.Read()) </code><code>//循环读取结果集</code>
<code> </code><code>{</code>
<code> </code><code>//读取数据库中的信息并显示在界面中</code>
<code> </code><code>this</code><code>.lblStudent.Text +=myDr[</code><code>"sno"</code><code>].ToString().Trim()</code>
<code> </code><code>+ </code><code>"&nbsp&nbsp&nbsp&nbsp"</code>
<code> </code><code>+ myDr[</code><code>"sname"</code><code>].ToString().Trim()</code>
<code> </code><code>+ </code><code>"&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"</code>
<code> </code><code>+ myDr[</code><code>"ssex"</code><code>].ToString().Trim()</code>
<code> </code><code>+ myDr[</code><code>"sclass"</code><code>].ToString().Trim()</code>
<code> </code><code>+myDr[</code><code>"sdept"</code><code>].ToString().Trim()</code>
<code> </code><code>+</code><code>"</br>"</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>myDr.Close(); </code><code>//关闭DataReader</code>
<code> </code><code>}</code>
<code> </code><code>catch</code>
<code> </code><code>Response.Write(</code><code>"连接失败!"</code><code>); </code><code>//异常处理</code>
<code> </code><code>finally</code>
<code> </code><code>myConn.Close(); </code><code>//关闭数据库连接</code>
<code>} </code>
参考文章
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5822523.html,如需转载请自行联系原作者