在前面,我们知道了如何使用Command对象的ExecuteScalar()方法从数据库中检索单个值,那么,要想从数据库中读取多条记录的时候该怎么办呢?我们可以使用Command对象的ExecuteReader()方法,这个方法返回一个DataReader对象,通过这个DataReader对象,我们就可以从数据库读取数据了。
使用DataReader对象可以从数据库中检索到只读的数据,它每次从查询结果中读取一行数据到内存中,所以使用DataReader对数据操作非常快。DataReader属于.NET数据提供程序,所以每种.NET数据提供程序都有自己的DataReader类。在这篇文章中,我们还是在SQL SERVER 数据库的基础上,讨论DataReader类。
DataReader对象
属性
HasRows 是否返回了结果,如果有查询结果返回True,否则返回False
FieldCount 当前行中的列
方法
Read () 前进到下一行记录,如果读到记录返回True,否则返回False
Close () 关闭DataReader对象
如何使用DataReader对象
创建DataReader对象,需要调用Command对象的ExecuteReader()方法,ExecuteReader()方法的返回值就是一个DataReader对象。
使用DataReader对象的步骤
(1)创建Connection对象
(2)创建Command对象
利用SQL语句和Connection对象创建Command对象
(3)打开数据库,调用Command 对象的ExecuteReader()方法返回DataReader对象
切记,一定要先打开数据库,然后在返回DataReader对象。因为ExecuteReader()方法要求已经打开并且可用的数据库连接。
(4)使用DataReader对象的Read()方法进行逐行读取,该方法返回Boolean类型的值,若有数据可读,则返回True.否则为,False
dataReader.Read()
(5)读取当前行某列的值
我们可以像使用数组那样,用方括号读取某列的值,如(type)dataReader[0],方括号中可以像数组一样使用列的索引,从0开始,也
可以使用列名,因为取出的值是Object类型的,所以要进行类型转换。
(string)dataReader["studentName"];
(6)关闭DataReader对象
调用其Close()方法进行关闭。DataReader对象它是独占数据库连接的。所以,当我们需要利用Connection对象进行其他操作时,
必须调用DataReader对象的Close()方法关闭DataReader对象。
示例:
以下代码的目的是通过DataReader对象读取数据,向ComBox控件中添加数据。
- //当前窗体加载时间发生
- public void TestFom_Load(object sender,EventArgs e)
- {
- try
- {
- string sql = "select * from Grade";
- string connString = "Data Source =.;Initial Catalog = MySchool;User ID = sa;Pwd = 123456";
- sqlConnection connection = new SqlConnection(connString);
- SqlCommd objCommand = new SqlCommand(sql,connection);
- connection.Open();
- SqlDataReader objReader = objCommand.ExecuteReader();
- if(objReader.HasRows)
- {
- while(objReader.Read())
- {
- this.cboItems.Items.Add(objReader[0].ToString());
- }
- objReader.Close();
- }
- }
- catch(Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- finally
- {
- connection.Close();
- }
- }