最近在做winform的編程,想到一真沒有使用過ExecuteReader。可能以前以后它的用戶不大,或者
不大好用,故沒有用過。今天在這里將學習記錄寫下來,供讀者參考:
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.csdn.net/zhchongyao/article/details/5544960