指定したパラメーターを使用してデータベースを更新するストアドプロシージャがありますが、ストアドプロシージャに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」の値を「文字列」に変換することはできません。
誰かアイデアはありますか?
Add
ではなく AddWithValue
を使用して、次のようなことを試してください。
DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
または、次のようにパラメーターを追加して、変数がnullの場合にデータベースにnull値を与えることができます。
DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);
amitが述べたように、null許容型として設定する必要があります。
詳細と背景については、 http://evonet.com.au/overview-of-c-nullable-types/ をご覧ください。
これを試して
クラスとそのプロパティを使用していて、それらのプロパティ値がパラメータとして使用されている場合は、これを行うことができます
プロパティの署名を変更します
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)
これは一例です。それは私のために働いています
if(obj.myDate == DateTime.MinValue)
{
aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value;
}
else
{
aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ;
}