3

テーブル値パラメータのnull値をC#のストアドプロシージャに送信する方法は?

4

4 に答える 4

5

このように使用します

command.Parameters.AddWithValue("@param", DBNull.Value);

これは、同じトピックに関する適切なリンク
です C#.net コードから SQL ストアド プロシージャに null 変数を渡す方法

リンクをたどる ことができます。
sqlDbType を知らずに SqlParameter で DBNull.Value を使用しますか?

于 2012-11-17T07:12:47.150 に答える
3

ただし、DBNull.Value の使用には少し問題があります。IOという名前のストアプロシージャに少しあるとしましょう。

ストアプロシージャで

   CREATE PROCEDURE [dbo].[stp_Check]
   @IO BIT

次に、コードに次のようにパラメーターを追加します。

   object parameter = new SqlParameter("IO", true); //using false is the same.

そして、ストアプロシージャを呼び出します

   _repositary.DataContext.Database.SqlQuery<CallDetail>("exec stp_Check @IO", parameter)();

ここで _repository は、コンテキストを持つ私の DataRepository クラスです。これには、sp が実行されることがわかっていれば十分です。

SQL Server プロファイラーを使用して呼び出しをキャッチできます。それは次のように生成されます。

declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO bit', -- parameter with the type passed
@IO=1 --parameter value used when executing the sp
select @p24

問題はこれです。次のように DBNull.Value でパラメータを作成すると、次のようになります。

    object parameter = new SqlParameter("IO", (object)DBNull.Value);

あなたが見つけることができるのは、SQLサーバープロファイラーからです

declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO nvarchar(4000)', -- the passes type is not boolean
@IO=NULL --parameter value is NULL
select @p24

これが機能することは事実ですが、これは意図したものではありません。私は好む

using System.Data.SqlTypes;

次のように null を渡すことができます。

 object parameter = new SqlParameter("IO", System.Data.SqlTypes.SqlBoolean.Null );

それではリクエストはこんな感じです。

declare @p24 int
set @p24=7
exec sp_executesql N'exec stp_Check @IO', --parameter passed
N'@IO bit', -- the passes type is boolean
@IO=NULL --parameter value is NULL
select @p24

int、bigint、datetime など、すべての sqltypes に null 値があります。乾杯。:)

于 2014-03-09T09:15:30.353 に答える
0

DBNull.Value渡すために使用しNULLます。

于 2012-11-17T07:16:09.747 に答える
-1

null をデフォルトのパラメーター値として追加し、null にしたい場合は値を送信しないでください。

元:

create procedure sp_name(@param1 varhcra(10), @param2 varchar(10)=null)

C#

command.Parameters.AddWithValue("@param1", "value1");
//dont pass any value for param2, it is considered null
于 2012-11-17T07:15:27.237 に答える