天天看点

DataReader方式 获取数据的操作一、使用DataReader读取为对象List二、使用DataReader对象读取数据

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>/// &lt;summary&gt;</code>

<code>/// 获得数据列表List&lt;&gt;,DataReader 使用参数的</code>

<code>/// &lt;/summary&gt;</code>

<code>/// &lt;param </code><code>name</code><code>=</code><code>"strWhere"</code><code>&gt;条件&lt;/param&gt;</code>

<code>/// &lt;param </code><code>name</code><code>=</code><code>"ht"</code><code>&gt;HashTable,保存参数名及参数对应的值&lt;/param&gt;</code>

<code>/// &lt;</code><code>returns</code><code>&gt;List&lt;DotNet.Model.Base_Department&gt;&lt;/</code><code>returns</code><code>&gt;</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&lt;DotNet.Model.Base_Department&gt; 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>&amp;&amp; ht.</code><code>Count</code> <code>&gt; 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&lt;DotNet.Model.Base_Department&gt; list = new List&lt;DotNet.Model.Base_Department&gt;();</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文件中配置数据库连接字符串,在&lt;configuration&gt;下的子配置节&lt;connectionStrings&gt;添加连接字符串。

(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 = "&amp;nbsp&amp;nbsp&amp;nbsp学号</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 姓名</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 性别</code>

<code>               </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 班级</code>

<code>                </code><code>&amp;nbsp&amp;nbsp&amp;nbsp 系别&lt;br&gt;";</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>"&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp"</code>

<code>                              </code><code>+ myDr[</code><code>"sname"</code><code>].ToString().Trim()</code>

<code>                              </code><code>+ </code><code>"&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;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>"&lt;/br&gt;"</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,如需转载请自行联系原作者