1

ただし、現在、Webベースのアプリのトランザクションを完了しようとしています。

Procedure or function 'completeTransaction' expects parameter '@dateTime', which was not supplied.

これが関数のコピーです。

public static void completeTransaction(string storeCode, string employeeId, DateTime Date, string itemListNoId)
{
    using (SqlConnection conn = new SqlConnection("Data Source = ; Initial Catalog =Business ; Integrated Security = true;"))
    {
        using (SqlCommand command = new SqlCommand("dbo.completeTransaction", conn))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@storeCode", SqlDbType.Int).Value = storeCode;
            command.Parameters.Add("@employeeId", SqlDbType.Int).Value = employeeId;
            **command.Parameters.Add("@Date", SqlDbType.DateTime).Value = Date;**
            command.Parameters.Add("@itemListNoId", SqlDbType.Int).Value = itemListNoId;
            conn.Open();

            command.ExecuteNonQuery();
            conn.Close();
        }
    }
}

私のSQLテーブルには、次のテーブルとタイプが含まれています(storeCode、INT、employee、INT、Date、DATETIME、itemListNoId、INT)

4

5 に答える 5

3

パラメータ'@dateTime'が必要です

。という名前のパラメータを渡しました@Date

于 2012-05-20T19:59:43.390 に答える
3

@dateTimeというパラメータを渡さないでください。この行のようです

command.Parameters.Add("@Date", SqlDbType.DateTime).Value = Date;

する必要があります

command.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = Date;

しかし、SPソースコードがなければ、確認するのは困難です。SQL Serverは、パラメーターのタイプではなく、パラメーターのNAMEについて不平を言っていることに注意してください。

于 2012-05-20T20:00:12.947 に答える
2

これを取得していて、正しい名前のパラメーターを渡した場合は、CommandTypeがストアドプロシージャに設定されていることを確認してください

cmd.CommandType = CommandType.StoredProcedure;  

これらの同じ症状が、各パラメーターがストアドプロシージャにどのように到達しているかを追跡するのに、恥ずかしいほど長い時間を費やしているのを見ていました。

于 2012-12-07T22:39:27.423 に答える
2

パラメータの名前が間違っています:

command.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = Date;
于 2012-05-20T20:00:45.247 に答える
0

以前の回答が正しく述べているように、このエラーの最も可能性の高い理由は、パラメータをに追加するのを忘れているか、SqlCommandコマンドのタイプをに設定するのを忘れていることです。CommandType.StoredProcedure

すでに上に正しく設定していて、まだ髪を引っ張っている場合は、これが理由である可能性があります。

パラメータ値をnull(たとえば mySQLParam1.Value = valuePassedToMe、の場合valuePassedToMenullに設定すると、同じエラーが発生します(つまり、プロシージャまたは関数'...'はパラメータ'...'を予期しますが、これは指定されていません)。

DBNull.Valueこれは、値が必要なときに割り当てることで解決できますnull

すなわち

mySQLParam1.Value = valuePassedToMe ?? (object)DBNull.Value;

パラメータに割り当てるnullと、ADO.Netはそれをに変換しdefaultます。以下は、SQLServerプロファイラーの例です。

exec dbo.MyStoredProcedure @mySQLParam1=default,@mySQLParam2=default,@mySQLParam3=default,...

DBNull.Valueを割り当てると、生成されるSQLは次のようになります。

exec dbo.MyStoredProcedure @mySQLParam1=NULL,@mySQLParam2=NULL,@mySQLParam3=NULL,...
于 2019-11-07T14:48:11.347 に答える