DataReader方式 获取数据的操作

简介:

 

一、使用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 = "&nbsp&nbsp&nbsp学号
                 &nbsp&nbsp&nbsp 姓名
                 &nbsp&nbsp&nbsp 性别
                &nbsp&nbsp&nbsp 班级
                 &nbsp&nbsp&nbsp 系别<br>";
               while  (myDr.Read())           //循环读取结果集
                 {
                        //读取数据库中的信息并显示在界面中
                       this .lblStudent.Text +=myDr[ "sno" ].ToString().Trim()
                               "&nbsp&nbsp&nbsp&nbsp"
                               + myDr[ "sname" ].ToString().Trim()
                               "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"
                               + myDr[ "ssex" ].ToString().Trim()
                               "&nbsp&nbsp&nbsp&nbsp"
                               + myDr[ "sclass" ].ToString().Trim()
                               "&nbsp&nbsp&nbsp&nbsp"
                               +myDr[ "sdept" ].ToString().Trim()
                               + "</br>" ;
                 }
                 myDr.Close();             //关闭DataReader
             }
             catch
             {
                 Response.Write( "连接失败!" );  //异常处理
             }
             finally
             {
                 myConn.Close();       //关闭数据库连接
             }
         }
}                       

 

 

 

参考文章

1. 雪夜DataReader方式 获取数据.

2. 悠哲RHT使用DataReader对象读取数据.

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5822523.html ,如需转载请自行联系原作者


相关文章
|
关系型数据库 定位技术 数据库
空间数据中台是什么,怎么用?DataQ空间智能全面开放邀测
阿里云空间数据中台不等同于GIS,它是在DataQ数据资源平台中体系化的整合了空间数据的处理能力,用于空间数据治理和空间领域数字化转型需要。DataQ空间智能包括空间数据同步、空间数据查询和浏览、空间数据管理、空间数据服务和空间数据资产管理等能力。用户可以通过阿里云官网注册账号并开通DataQ的试用白名单来使用DataQ空间智能。在使用过程中,需要注意空间数据源的配置、zip压缩方式、计算集群的设置等问题。DataQ空间智能公共云的开通,将大幅度降低体验和试用的门槛和成本,为线下项目的选型做好准备;同时仍然需要一定的技术投入和耐心,但数字化转型是未来的大势所趋,空间数据中台是必然的选择。
空间数据中台是什么,怎么用?DataQ空间智能全面开放邀测
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
5875 0
|
Java 关系型数据库 MySQL
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 1
JSP标准标签库(JSTL)是用于封装JSP应用核心功能的标签集,支持迭代、条件判断等任务。它包括核心、格式化、SQL、XML和函数5个标签库。要安装JSTL,需下载`jakarta-taglibs-standard`,将`.jar`文件放入`/WEB-INF/lib/`,并将TLD文件复制到`WEB-INF`。在`web.xml`中配置相应的`taglib`条目以启用使用。
133 17
@SneakyThrows 是 Lombok 库中的一个注解
`@SneakyThrows` 是 Lombok 库中的一个注解,它可以让你在方法签名中省略异常声明,而不需要显式地使用 try-catch 块来处理这些异常。当你使用 `@SneakyThrows` 注解时,Lombok 会自动生成相应的 try-catch 代码,将异常封装成运行时异常(通常是 `RuntimeException` 或其子类)。 这个注解在某些情况下可以简化代码,但请注意,它可能会隐藏潜在的问题,因为异常被转换成了运行时异常,这可能导致调用者无法正确处理这些异常。 下面是一个使用 `@SneakyThrows` 的示例: ```java import lombok.S
911 0
|
机器学习/深度学习 编解码 Go
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
1673 0
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)
|
数据挖掘 Linux
Linux系统struct input_event结构体分类型(鼠标、键盘、触屏)详解与例子
Linux系统struct input_event结构体分类型(鼠标、键盘、触屏)详解与例子
2184 0
Linux系统struct input_event结构体分类型(鼠标、键盘、触屏)详解与例子
|
安全 算法 小程序
沃通SSL证书助力金融行业网络安全建设
沃通SSL证书基于PKI/CA体系及密码技术,为银行、证券、基金、信托等金融行业客户,从技术上解决网上身份认证、数据机密性、信息完整性和抗抵赖等网络安全问题
627 2
 沃通SSL证书助力金融行业网络安全建设