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
///
/// 获得数据列表List<>,DataReader 使用参数的
///
/// name="strWhere">条件
/// name="ht">HashTable,保存参数名及参数对应的值
/// <returns>List</returns>
/// 使用方法:string str = "id=@id";Hashtable ht = new Hashtable();ht.Add("@id", 10);
public List 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 list = new List();
        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文件中配置数据库连接字符串,在下的子配置节添加连接字符串。

(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 = "   学号
                    姓名
                    性别
                   班级
                    系别
";
              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()
                              +"";
                }
                myDr.Close();            //关闭DataReader
            }
            catch
            {
                Response.Write("连接失败!"); //异常处理
            }
            finally
            {
                myConn.Close();      //关闭数据库连接
            }
        }
}                       

 

 

 

参考文章

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

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

 

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




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

相关文章
|
资源调度 算法 JavaScript
Python基础专题 - 超级详细的 Random(随机)原理解析与编程实践
Python基础专题 - 超级详细的 Random(随机)原理解析与编程实践
1626 0
|
4月前
|
Ubuntu Unix 开发工具
Ubuntu系统安装Docker详细攻略,触觉智能RK3568开发板演示
如图可以看到Docker已经处在运行状态。 执行docker info可以看到Docker加速地址已经添加上去了。 再次执行docker run hello-world 可以发现Docker已经正常运行成功。
|
前端开发 JavaScript 安全
|
SQL 存储 安全
深入浅出:SQL数据库建表全过程详解
数据库是现代信息系统的核心组成部分,而SQL(结构化查询语言)则是管理和操作数据库的最主要工具之一。在创建数据库的过程中,建表是非常重要的一步,因为它决定了数据的存储结构和方式。本文将详细介绍SQL数据库建表的全过程,帮助读者更好地理解并掌握这一关键技术。一、了解数据库与表的基本概念在深入SQL数据
587 1
|
Java Spring
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
701 0
|
分布式计算 Python
【python笔记】高阶函数map、filter、reduce
【python笔记】高阶函数map、filter、reduce
306 0
|
前端开发 Java 应用服务中间件
选择 Spring Boot 进行微服务开发的 7 大理由
选择 Spring Boot 进行微服务开发的 7 大理由
248 1
|
数据采集 运维 监控
DataphinV4.0来啦:自定义全局角色 ,实时研发覆盖全部署场景,个性化企业配置看本期
本次V4.0版本升级,Dataphin支持自定义全局角色、自定义逻辑表命名规范、Flink on K8s的部署模式,提升企业级适配能力,灵活匹配企业特色;将集成任务快速从组件模式切换为脚本模式、支持外部触发类型节点等,提升研发平台易用性,助力高效开发便捷运维。
91526 1
|
存储 SQL Oracle
|
机器学习/深度学习 算法 数据挖掘
使用NumPy实现经典算法案例集
【4月更文挑战第17天】本文展示了NumPy在Python中实现经典算法的案例,包括使用NumPy进行冒泡排序、计算欧几里得距离、矩阵转置和协方差矩阵。这些示例突显了NumPy在数值计算、数据分析和科学计算中的威力,强调了掌握NumPy对于数据科学家和机器学习开发者的重要性。