web-dev-qa-db-ja.com

パラメータのNULLをストアドプロシージャのDateTimeフィールドに渡します

指定したパラメーターを使用してデータベースを更新するストアドプロシージャがありますが、ストアドプロシージャにNULLを渡すのに問題があります

NULLにする必要があるフィールドはDateTimeフィールドです

DB.Parameters.AddWithValue("@date", NULL)

これは私にエラーを与えます

「NULL」は宣言されていません。 「Null」定数はサポートされなくなりました。代わりに「System.DBNull」を使用してください

だから私は試しました

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString())

ただし、これにより、1900-01-01 00:00:00.000がフィールドに渡されるため、列に値""が生成されます。

私も試しました

DB.Parameters.AddWithValue("@date", DBNull.Value)

しかし、それはこのエラーを生成します

タイプ「System.DBNull」の値を「文字列」に変換することはできません。

誰かアイデアはありますか?

12
Jamie Taylor

Addではなく AddWithValue を使用して、次のようなことを試してください。

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
13
LukeH

または、次のようにパラメーターを追加して、変数がnullの場合にデータベースにnull値を与えることができます。

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);

amitが述べたように、null許容型として設定する必要があります。

詳細と背景については、 http://evonet.com.au/overview-of-c-nullable-types/ をご覧ください。

15
Robbie Mills

これを試して

クラスとそのプロパティを使用していて、それらのプロパティ値がパラメータとして使用されている場合は、これを行うことができます

プロパティの署名を変更します

public DateTime? myDateTime = null;// Here ? is used to make the property nullable.

また、日付列のタイプがvarcharの場合は、Date(Sql2008)/ DateTime(2005)に修正してください。

//パラメータをこれに変更します

@SomeDate datetime = null (as suggested by chris)

フィールドがnullを受け入れてから、値を次のように渡すことを許可します

DB.Parameters.Add("@date", DBNull.Value)
2
user240141

これは一例です。それは私のために働いています

if(obj.myDate == DateTime.MinValue)
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value;
}
else
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ;
}
0
daniele3004