4

サンプルコードがあります

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 *FROMaTABLE'が見つかりませんでした

この場合、SqlCommandオブジェクトの新しいインスタンスを作成する必要がありますか?

同じSqlCommandオブジェクトを使用してオブジェクトの作成を回避する方法ですか?

4

4 に答える 4

10

そのはず

aCommand.CommandType = CommandType.Text

実際には、のデフォルト値CommandTypeCommandType.Text

于 2012-08-29T08:34:31.287 に答える
7

問題は、それを再利用したSqlCommandCommandTypeStoredProcedureで通常のSQLクエリを実行したいということですCommandType.Text

「この場合、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;
}
于 2012-08-29T08:44:24.547 に答える
5
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.AddWithValue("@book_id", bookID);
aCommand.Parameters.AddWithValue("@user_id", userID);
  1. 呼び出すストアドプロシージャ名を指定します

    aCommand.CommandText=yourstoredprocedurename;
    aCommand.ExecuteNonQuery();
    
  2. 次に、selectとsqlreaderを呼び出して結果を取得します

    bCommand.CommandType = CommandType.Text
    bCommand.CommandText = "SELECT * FROM aTABLE";
    SqlDataReader rdr = bCommand.ExecuteReader();
    
于 2012-08-29T08:41:32.493 に答える
3

Command以前に設定したパラメータと値を消去するには、新しいオブジェクトを作成する必要があります。

aCommand=new SqlCommand();
aCommand.Connection=cn;
aCommand.CommandText = "SELECT * FROM aTABLE";
SqlDataReader reader=aCommand.ExecuteReader();

データベースの結果をフェッチするExecuteReader()代わりにメソッドを呼び出します。ExecuteNonQuery

于 2012-08-29T08:39:09.263 に答える