ExcuteReader方法返回一个DataReader对象。
特点
●DataReader一次遍历一行数据,并返回一个包含列名字集合。
●第一次调用Read()方法获取第一行数据,并将游标指向下一行数据。当再次调用该方法时候,将读取下一行数据。
●当检测到不再有数据行时,Read()方法将返回false。
●通过HasRows属性,我们知道查询结果中是否有数据行。
●当我们使用完DataReader时,一定要注意关闭。SQL Server默认只允许打开一个DataReader。
案例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ExecuteNonQuery
{
class Program
{
static void Main(string[] args)
{
//1.构造连接字符串的方法
SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();
connStr.DataSource = "192.168.1.20";
connStr.InitialCatalog = "mshDB_Debug";
connStr.UserID = "developer";
connStr.Password = "developer";
connStr.Pooling = true;
connStr.MaxPoolSize = 1000;
connStr.MinPoolSize = 1;
//2.创建Connection对象
SqlConnection conn = new SqlConnection(connStr.ToString());
//3.拼接SQL语句
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from tb_Customer");
//4.创建Command对象
SqlCommand cmd = new SqlCommand(strSql.ToString(), conn);
cmd.CommandType = CommandType.Text;
//5.执行SQL语句
try
{
conn.Open(); //注意需要打开连接
SqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader
if (reader != null && reader.HasRows)
{
int rows = 0;//记录行数
Console.WriteLine("**********Records of tb_Customer**********\n");
while(reader.Read())
{
for (int i = 0; i < reader.FieldCount; ++i)
{
Console.WriteLine("{0}:{1}", reader.GetName(i), reader.GetValue(i));
}
++rows;
}
Console.WriteLine("\n共{0}行记录", rows);
}
reader.Close();//关闭DataReader
}
catch (Exception e)
{
Console.WriteLine("\nError:{0}",e.Message);
}
finally
{
conn.Close(); //关闭连接
conn.Dispose(); //释放连接资源
}
}
}
}
运行如下: