0

私の .NET アプリケーションの 1 つで、sybase データベースでストアド プロシージャを呼び出そうとしていますが、ビジネス ロジックによると、送信している値の一部が null になる可能性があります。

ただし、null 値を送信すると、「サポートされていないパラメーター タイプ」という例外が発生します。

助言がありますか?

4

2 に答える 2

1

コマンドにパラメーターをまったく追加しないでください。.NET に関する限り、null と見なされます。

于 2012-05-24T15:17:22.203 に答える
0

null 値をデータベースに渡すときDBNull.Valueは、代わりに を使用します。null

Sybaseから: 「create プロシージャ ステートメントのパラメータにデフォルト値を割り当てることができます。この値は任意の定数であり、ユーザーが値を指定しない場合、プロシージャへの引数として使用されます。」.

次のスクリプトは、SP をデフォルト値で宣言し、2、NULL、DEFAULT、および値なしで渡して実行します。パラメータを指定しない場合の動作は、DEFAULT を渡す場合と同じであり、NULL を渡す場合とは異なる場合があることがわかります。

Command オブジェクトのパラメーターを宣言しないと、次のような動作が発生するため、これが私が指摘した違いです。

CREATE PROCEDURE MySp(@p1 INT = 1)
AS BEGIN
  SELECT @p1 AS [parameter_value];
END
GO

EXEC MySp 2;       -- parameter value = 2
EXEC MySp NULL;    -- parameter value = NULL
EXEC MySp DEFAULT; -- parameter value = 1
EXEC MySp;         -- parameter value = 1
GO
于 2012-05-24T15:21:01.420 に答える