ADO.NET讀書筆記系列之------SqlCommander和SqlDataReader對象
發表于:2007-07-02來源:作者:點擊數:
標簽:
一、特點介紹 ⒈SqlCommand:表示要對SQL Server 數據庫 執行的一個Transact-SQL語句或存儲過程。 ⒉SqlDataReader:提供一種從數據庫讀取只進的行流的一種方式。若要創建SqlDataReader,必須調用SqlCommand對象的ExecuteReader方法,而不直接使用構造函數。應
一、特點介紹
⒈SqlCommand:表示要對SQL Server
數據庫執行的一個Transact-SQL語句或存儲過程。
⒉SqlDataReader:提供一種從數據庫讀取只進的行流的一種方式。若要創建SqlDataReader,必須調用SqlCommand對象的ExecuteReader方法,而不直接使用構造函數。應該盡可能迅速的關閉SqlDataReader對象。
⒊SqlParameter:表示SqlCommand的參數,也可以是它到DataSet列的映射。
二、使用介紹
⒈創建SqlCommand對象:
string strConn,strSQL;
strConn=”…………”;
strSQL=”Select CustomerID,CompanyName from Customers”;
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd;
cmd=new SqlCommand();
cmd.CommandText=strSQL;
cmd.Connection=cn;
cmd=new SqlCommand(strSQL,cn);
⒉執行無返回行的查詢:
string strConn,strSQL;
strConn=”……”;
strSQL=”Update Customers SET CompanyNme=’NewName’where CustomersID=’ALFKI’”;
SqlConnection cn=new SqlConnection(strConn);
cn.Open();
SqlCommand cmd=new SqlCommand(strSQL,cn);
int RecordsAffercted=cmd.ExecuteNonQuery();
if(RecordsAffercted ==1)
……
else
…………
⒊用SqlDataReader對象檢查查詢結果:
① 獲取結果
string strConn,strSQL;
strConn=”……”;
SqlConnection cn=new SqlConnection(strConn);
cn.Open();
strSQL=”Select CustomerID,CompanyName from Customers”;
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataReader rdr=cmd.ExecuteReader();
While(rdr.Read())
Console.Writeline(rdr[“CustomerID”]+rdr[“CompanyName”]);
Rdr.Close();
② 更快獲取
Ⅰ使用基于序號的查找
……
SqlDataReader rdr=cmd.ExecuteReader();
int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);
int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyName”);
while(rdr.Read())
Console.WriteLine(rdr[CustomerIDOrdinal]+rdr[CompanyNameOrdinal]);
rdr.Close();
Ⅱ使用適當的類型指定Get方法
……
SqlDataReader rdr=cmd.ExecuteReader();
int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);
int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyNameOrdinal”);
while(rdr.Read())
Console.WriteLine(rdr.GetString(CustomerIDOrdinal)+rdr.GetString(CompanyNameOrdinal));
rdr.Close();
③獲取多個結果
…
cn.Open();
string strSQL =”select CustomerID,CompanyName from Customers;”+“select OrderID,CustomerID from Orders;”;
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataReader rdr=cmd.ExecuteReader();
do
{
while(rdr.Read())
Console.WriteLine(rdr[0]+rdr[1]);
Console.WriteLine();
}while(rdr.NextResult());
⒋執行返回單值的查詢:
…
cn.Open();
SqlCommand cmd=new SqlCommand(“select count(*) from customers",cn);
int Customres = Convert.ToInt32(cmd.ExecuteScalar());
⒌執行參數化查詢和調用存儲過程:
SqlCommand cmd = new SqlCommand("DelQXRY", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterRoleID = new SqlParameter("@ID", SqlDbType.Int, 4);
parameterRoleID.Value = 444;
cmd.Parameters.Add(parameterRoleID);
cn.Open();
cmd.ExecuteNonQuery();
⒍ 從 輸出參數中獲取數據:
Create Procedure GetCustomer(@CompanyName nvarchar(30) output,@CustomerID nchar(5)) AS SELECT @CompanyName=CompanyName from Customers where CustomerID=@CustomerID
…
cmd.Parameters[“@CompanyName”].Direction =ParameterDirection.Output;
⒎在Transaction中執行查詢:
…
cn.Open();
SqlTransaction txn=cn.BeginTransaction();
String strSQL=”Insert into Customers(…)values(…)”;
SqlCommand cmd=new SqlCommand(strSQL,cn,txn);
int RecordAffected = cmd.ExecuteNonQuery();
if(RecordAffected ==1)
{
txn.Commit();
}
else
{
txn.RollBack();
}
三、屬性方法事件介紹
⒈SqlCommand
Ⅰ屬性
①CommandText: 要執行的 Transact-SQL 語句或存儲過程。默認為空字符串。
②CommandTimeOut: 等待命令執行的時間(以秒為單位)。默認為 30 秒。
③CommandType: CommandType 值之一。默認值為 Text。
④Connection: 與數據源的連接。默認值為空引用
⑤Parameters: Transact-SQL 語句或存儲過程的參數。默認為空集合。
⑥Transaction:指定用于查詢的事務處理
⑦UpdateRowSource:如果通過調用DataAdapter對象的Update方法來使用Command,那么該屬性就用于控制影響當前DataRow的查詢結果(默認值為Both)
Ⅱ方法
①Cancel: 試圖取消SqlCommand的執行。如果沒有要取消的內容,則什么都不會發生。但如果有命令正在執行,而取消嘗試失敗,則不會生成異常。Cancel方法還會導致Command對象刪除DataReader對象上所有未讀的行。
②CreateParameter:為查詢創建一個新參數。
③ExecuteNonQuery:對連接執行Transact-SQL語句并返回受影響的行數。對于 UPDATE、INSERT 和 DELETE 語句,返回值為該命令所影響的行數。對于所有其他類型的語句,返回值為 -1。如果發生回滾,返回值也為 -1。
④ExecuteReader:將CommandText發送到Connection并生成一個SqlDataReader。
public SqlDataReader ExecuteReader(CommandBehavior);
⑤ExecuteScalar:執行查詢,并返回查詢所返回的結果集中第一行的第一列。忽略額外的列或行。
⑥ExecuteXmlReader:將CommandText發送到Connection并生成一個XmlReader。
⑦PrePare:在 SQL Server 的實例上創建命令的一個準備版本。在調用 Prepare 之前,應指定要準備的語句中的每個參數的數據類型。
⑧ResetCommandTimeOut:將CommandTimeout屬性設置為默認值30秒。
Ⅲ事件
⒉SqlDataReader
Ⅰ屬性
①Depth:獲取一個值,該值指示當前行的嵌套深度。最外層表的深度為零。SQL Server .NET Framework 數據提供程序不支持嵌套并總是返回零值。
②FieldCount:獲取當前行中的列數。如果未放在有效的記錄集中,則為 0;否則為當前行中的列數。默認值為 -1。執行不返回行的查詢后,FieldCount 返回 0。
③HasRows:如果SqlDataReader包含一行或多行,則為true;否則為false。
④IsClosed:如果SqlDataReader已關閉,則為true;否則為false。
⑤Item:獲取以本機格式表示的列的值。
⑥RecordsAffected:已更改、插入或刪除的行數;如果沒有任何行受到影響或語句失敗,則為 0;-1 表示 SELECT 語句。
Ⅱ方法
①Close:關閉SqlDataReader對象。如果返回值和查詢影響的記錄的數量不重要,則可以在調用Close方法前調用關聯的SqlCommand對象的Cancel方法,從而減少關閉SqlDataReader所需要的時間。
②GetName:獲取指定列的名稱。
③GetOrdinal:在給定列名稱的情況下獲取列序號。
④GetValue:獲取以本機格式表示的指定列的值。
⑤GetValues:獲取當前行的集合中的所有屬性列。
⑥IsDBNull:獲取一個值,該值指示列中是否包含不存在的或缺少的值。如果指定的列值與DBNull等效,則為true;否則為false。
⑦NextResult:當讀取批處理 Transact-SQL 語句的結果時,使數據讀取器前進到下一個結果。如果存在多個結果集,則為 true;否則為 false。
⑧Read:使SqlDataReader前進到下一條記錄,如果存在多個行,則為true;否則為false。必須調用Read來開始訪問任何數據。在某一時間,每個關聯的SqlConnection只能打開一個SqlDataReader,在上一個關閉之前,打開另一個的任何嘗試都將失敗。
Ⅲ事件
⒊SqlParameter
Ⅰ屬性
①DbType:獲取或設置參數的DbType。默認值為String。
②Direction:獲取或設置一個值,該值指示參數是只可輸入、只可輸出、雙向還是存儲過程返回值參數。默認值為 Input。
③IsNullable:獲取或設置一個值,該值指示參數是否接受空值。如果接受空值,則為 true;否則為 false。默認為 false。
④ParameterName:獲取或設置 SqlParameter 的名稱。
⑤Size:獲取或設置列中數據的最大大?。ㄒ宰止潪閱挝唬?。默認值是從參數值推導出的。
⑥SqlDbType:獲取或設置參數的SqlDbType。默認為NVarChar。SqlDBType和DbType是相互連接的。設置DBtype會將SqlDbType更改為支持的SqlDbType。
⑦Value:獲取或設置該參數的值。默認為空。
Ⅱ方法
Ⅲ事件
原文轉自:http://www.kjueaiud.com