私の .NET アプリケーションの 1 つで、sybase データベースでストアド プロシージャを呼び出そうとしていますが、ビジネス ロジックによると、送信している値の一部が null になる可能性があります。
ただし、null 値を送信すると、「サポートされていないパラメーター タイプ」という例外が発生します。
助言がありますか?
私の .NET アプリケーションの 1 つで、sybase データベースでストアド プロシージャを呼び出そうとしていますが、ビジネス ロジックによると、送信している値の一部が null になる可能性があります。
ただし、null 値を送信すると、「サポートされていないパラメーター タイプ」という例外が発生します。
助言がありますか?
コマンドにパラメーターをまったく追加しないでください。.NET に関する限り、null と見なされます。
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