![](/img/trans.png)
[英]How to “reset” C# SqlCommand object so I can re-use it in a loop
[英]How to re-use SqlCommand object for a CommandText after executing a query based on stored procedure in C#?
我有一個示例代碼
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.AddWithValue("@book_id", bookID);
aCommand.Parameters.AddWithValue("@user_id", userID);
之后我想使用CommandText
執行一個簡單的查詢:
aCommand.CommandText = "SELECT * FROM aTABLE";
aCommand.ExecuteNonQuery();
但是錯誤發生了:
例外:找不到存儲過程'SELECT * FROM aTABLE'
在這種情況下,我必須創建一個新的SqlCommand
對象實例?
這是一種使用相同的SqlCommand
對象來避免創建一個的方法嗎?
它應該是
aCommand.CommandType = CommandType.Text
實際上, CommandType
的默認值是CommandType.Text
問題是你已經重用了一個SqlCommand
, CommandType
是StoredProcedure
但你想用CommandType.Text
執行一個普通的sql查詢。
“在這種情況下,我必須創建一個新的SqlCommand對象實例?”
我建議這樣做以避免這種混淆。 創建SqlCommand
並不是那么昂貴,您需要重用它。 實際上構造函數只不過是設置屬性。
來自ILSpy
:
// System.Data.SqlClient.SqlCommand
// this() does only call _SuppressFinalize
public SqlCommand(string cmdText, SqlConnection connection) : this()
{
this.CommandText = cmdText;
this.Connection = connection;
}
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.AddWithValue("@book_id", bookID);
aCommand.Parameters.AddWithValue("@user_id", userID);
指定您調用的存儲過程名稱
aCommand.CommandText=yourstoredprocedurename; aCommand.ExecuteNonQuery();
然后調用你的select和sqlreader來獲得結果
bCommand.CommandType = CommandType.Text bCommand.CommandText = "SELECT * FROM aTABLE"; SqlDataReader rdr = bCommand.ExecuteReader();
您必須構造新的Command
對象以擦除先前設置的參數和值。
aCommand=new SqlCommand();
aCommand.Connection=cn;
aCommand.CommandText = "SELECT * FROM aTABLE";
SqlDataReader reader=aCommand.ExecuteReader();
調用ExecuteReader()
方法而不是ExecuteNonQuery
來獲取數據庫結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.