DataReader方式 获取数据的操作

一、使用DataReader读取为对象List

    /// <summary>
    /// 获得数据列表List<>,DataReader 使用参数的
    /// </summary>
    /// <param name="strWhere">条件</param>
    /// <param name="ht">HashTable,保存参数名及参数对应的值</param>
    /// <returns>List<DotNet.Model.Base_Department></returns>
    /// 使用方法:string str = "[email protected]";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中写下如下代码:

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对象读取数据.

时间: 2024-08-24 22:02:29

DataReader方式 获取数据的操作的相关文章

Http 以post方式获取数据

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import j

iOS网络编程——Day4(使用NSURLConnection异步方式获取数据)

XCode7使用HTTPS通信,在info.plist文件中加一个属性@{@"NSAppTransportSecurity":@{@"NSAllowsArbitraryLoads":YES}} 接口网站:http://www.webxml.com.cn xml  国际标准 json 流行标准 get: 使用简单,接口外露不安全 //QQ在线查询的接口宏定义GET#define QQOnlineURL_GET @"http://webservice.webx

第90讲,Spark streaming基于kafka 以Receiver方式获取数据 原理和案例实战

1:SparkSteaming基于kafka获取数据的方式,主要有俩种,即Receiver和Derict,基于Receiver的方式,是sparkStreaming给我们提供了kafka访问的高层api的封装,而基于Direct的方式,就是直接访问,在sparkSteaming中直接去操作kafka中的数据,不需要前面的高层api的封装.而Direct的方式,可以对kafka进行更好的控制!同时性能也更好. 2:实际上做kafka receiver的时候,通过receiver来获取数据,这个时候

Hibernate 以流的方式获取数据

hibernateQuery.setFetchSize(Integer.MIN_VALUE); results = hibernateQuery.scroll(ScrollMode.FORWARD_ONLY); this is how to query data out using stream 防止内存中加载的数据过多

关于 ThinkPHP5 使用 getBy 字段名方式获取数据

有小伙半说怎么全文搜索都没有搜索到 getByName 之类的函数. 其实是在这里. 原文地址:https://www.cnblogs.com/F4NNIU/p/9896078.html

Request三种获取数据的方式

今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Request.QueryString: 该方法主要是获取页面路径URL的参数: 2. Request.Form:该方法主要是以post请求方式获取报文体的参数: 3. Request.param:包含上面两种方式,它会在QueryString,Form,ServerVariable中都搜索一遍: 而我今

PDO获取数据的方法fetch()、fetchAll()、setFetchMode()、bindColumn()

PDO的数据获取方法与其他数据库扩展都非常类似,只要成功执行SELECT查询,都会有结果集对象产生.不管是使用PDO对象中的query()方法,还是使用prepare()和execute()等方法结合的预处理语句,执行SELECT查询都会得到相同的结果集对象PDOStatement.都需要通过PDOStatement类对象中的方法将数据遍历出来.下面介绍PDOStatement类中常见的几个获取结果集数据的方法. 1.fetch()方法 PDOStatement类中的fetch()方法可以将结果

HttpClient获取数据

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议.如果只是需要向Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任.但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面.在这种情况下,就需要涉及Session

IE浏览器同过get\delete请求时,获取不到数据或者获取数据有误

地址:https://blog.csdn.net/weixin_34417814/article/details/93327578 在ie浏览器用get方式获取数据时因为发送得到参数地址都是一样的,所以浏览器会优先从缓存获取数据,而不去服务器请求数据,post由于参数不同所以不会影响. 解决方法: 1.  Internet选项--浏览历史记录--设置-- Internet 临时文件的选项改为每次访问网页时也可以 2. 在ajax请求的页面后加随机数 例:URL=“t=”+Math.random(