8

次のストアドプロシージャがあります

CREATE PROCEDURE [dbo].[usp_GetData]
@foo VARCHAR (20), @bar bit = 1
AS ...

これにより、SSMS で呼び出されたときに正しい結果が得られます。

EXEC dbo.usp_GetData @foo = 'Hellow World', @bar = 0

以下のようにC#アプリケーション内で呼び出す場合

cmd.Parameters.Add(new SqlParameter("@foo", foo)); 
cmd.Parameters.Add(new SqlParameter("@bar", 0));

& は、以下のようにプロファイラーによってキャプチャされます。

exec dbo.usp_GetData @foo=N'Hello World',@bar=default

デフォルトをオーバーライドするパラメーターは別の方法で渡す必要がありますか?

4

3 に答える 3

2

new SqlParameter("@bar", 0)間違ったオーバーロードをトリガーします - string parameterName, SqlDbType dbType。値が設定されていないことになります。

値を設定するものが必要なので、 にする必要がありますnew SqlParameter("@bar", (object)0)

AddWithValueが紹介された理由です。

于 2013-09-26T23:26:21.360 に答える
0

より良く安全:

cmd.Parameters.Add("@bar", SqlDbType.NVarChar, 16, "bar");
于 2014-02-19T13:13:14.677 に答える