ExecuteReader的用法

本文深入探讨SQLDataReader方法的功能、用法及注意事项,包括如何使用ExecuteReader方法进行数据库查询,如何通过Read方法遍历结果集,以及GetValue方法用于检索字段值。同时,通过实例代码演示SQLDataReader的应用场景。
部署运行你感兴趣的模型镜像
 

1、MSDN上说:Sends the CommandText to the Connection and builds a SqlDataReader.

                  (这句话就不翻译了)

2、实例片段:

 [C#]
public void CreateMySqlDataReader(string mySelectQuery, SqlConnection myConnection)
{

string sql;//sql语句
    SqlCommand myCommand = new SqlCommand(sql, myConnection);
    myConnection.Open();
    SqlDataReader myReader;
    myReader = myCommand.ExecuteReader();
    try
    {
      while(myReader.Read())
      {
        Console.WriteLine(myReader.GetString(0));
      }
    }
    finally
    {
      myReader.Close();
      myConnection.Close();
    }
}


3、下面说说它的用法:

①:

用法:ExecuteReader 方法存在的目的只有一个:尽可能快地对数据库进行查询并得到结果。ExecuteReader 返回一个                 DataReader对象:如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OleDbCommand对象中调用,返回的是OleDbDataReader。可以调用DataReader的方法和属性迭代处理结果集。它是一个快速枚举数据库查询结果的机制,是只读、只进的。对SqlDataReader.Read的每次调用都会从结果集中返回一行。

②:

这是出自我平时所用的时候的一些认识:那就是如果我们在进行数据操作时,如果没有数据可操作,那么我们只能使用ExecuteReader()这个CMD,而executeNoeQuery()与Executescalar()如果在没有数据的时候使用时,就会出错“对像没有实例化”的错误。所以我们在判断是否有数据时,只可以用ExecuteReader()中的REad()方法来检测。

④:

DataReader还有一个GetValue方法可以用来检索字段的值。GetValue返回一个一般性的Object,但是被无数个返回强类型的Get方法补充,比如GetInt32和GetDecimal(参考MSDN2005)。对GetOrdinal的调用是必须的,因为GetDecimal只接受整型索引。GetOrdinal所做的工作正好与GetName相反——它把字段名转换成数字索引。

注意:DataReader必须处理Close方法。

using System.Data.SqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

conn.Open();

SqlCommand cmd = new SqlCommand("SELECT * FROM titles WHERE advance != 0", conn);

SqlDataReader reader = cmd.ExecuteReader();

int index = reader.GetOrdinal("advance");

while(reader.Read())

   Console.WriteLine("{0:c}", reader.GetDecimal(index));

   =================================

   -- Console.WriteLine(reader.GetName(0));

   =================================

''reader.Close();''

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message);

}

finally

{

========================================================

-- 可以配置DataReader,使它真的可以关闭一个底层连接

-- reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

========================================================

conn.Close();

}

⑤:

现在来强调下:现在来说下ExecuteReader的read()方法,它就是读取一个表的记录,即执行读,每次调用都是返回一行的结果集。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zhchongyao/archive/2010/04/30/5544960.aspx

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

### 三级标题:`ExecuteReader()` 方法的功能与作用 `ExecuteReader()` 方法用于执行 SQL 查询语句并返回一个 `SqlDataReader` 对象,该对象可以逐行读取查询结果。此方法适用于需要从数据库中检索多条记录的场景,尤其是当结果集较大或需要按顺序访问数据时。与 `ExecuteNonQuery()` 不同,`ExecuteReader()` 不能用于执行修改数据库结构或数据的语句,而是专注于数据的读取操作 [^1]。 ### 三级标题:使用场景与典型应用 在实际开发中,`ExecuteReader()` 常用于以下场景: - 查询数据库中的多条记录。 - 读取只读、前向的数据流。 - 执行复杂的 `SELECT` 查询,包括连接多个表或使用聚合函数。 - 与绑定控件结合使用,为 UI 提供数据源。 以下是一个使用 `ExecuteReader()` 查询学生信息的示例: ```csharp string selectQuery = "SELECT sName, Age FROM studentInfo WHERE sClass = '计算机科学'"; SqlConnection conn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectQuery, conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine("姓名: {0}, 年龄: {1}", reader["sName"], reader["Age"]); } reader.Close(); conn.Close(); ``` 在此示例中,`ExecuteReader()` 返回的 `SqlDataReader` 对象用于遍历查询结果中的每一行,并读取字段值 [^1]。 ### 三级标题:注意事项与最佳实践 在使用 `ExecuteReader()` 时,需注意以下几点: - 必须确保在调用 `ExecuteReader()` 之前数据库连接已经打开,否则会抛出异常 。 - `SqlDataReader` 是一个只读、前向的游标,不支持随机访问或反向遍历。 - 为避免资源泄漏,应在使用完毕后调用 `Close()` 方法关闭 `SqlDataReader` 和数据库连接。 - 推荐使用 `using` 语句块管理 `SqlConnection` 和 `SqlCommand` 的生命周期,确保资源自动释放。 以下是一个使用 `using` 语句优化的代码示例: ```csharp string query = "SELECT ID, sName FROM studentInfo WHERE sClass = @className"; using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand cmd = new SqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@className", "软件工程"); conn.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("ID: {0}, 姓名: {1}", reader["ID"], reader["sName"]); } } } ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值