- PR -

Date型パラメータへのNull値の代入

1
投稿者投稿内容
バレル
会議室デビュー日: 2003/12/24
投稿数: 8
投稿日時: 2004-02-18 16:55
お世話になります。

SQL Serverのストアドプロシージャへのパラメータの追加の際、
Date型パラメータに「Null」を代入するにはどうすればよいのでしょうか?

.Parameters.Add("@年月日", SqlDbType.SmallDateTime).Value = DBNull.Value
の場合は「"型 'DBNull' から型 'Integer' へのキャストが有効ではありません。"」
('Integer' とういうのもしっくりこないのですが・・・。)

Dim dateInsertValue as Date = Nothing
.Parameters.Add("@年月日", SqlDbType.SmallDateTime).Value = dateInsertValue
の場合は「SqlDateTime のオーバーフローです。」となってしまいます。

なるべくなら、ストアドプロシージャ側での変更はしたく無いので弱っています。
宜しくご教示下さいませ。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-18 17:02
.Parameters.Add("@年月日", SqlDbType.Variant ).Value = DBNull.Value
でうまくいきませんか?

くわしくはSqlDbType列挙体をヘルプで調べてみてください
バレル
会議室デビュー日: 2003/12/24
投稿数: 8
投稿日時: 2004-02-18 17:27
ゆうじゅん様

早速の御返答有難う御座いました。

ご教示のとおり、SqlDbType.Variantに変更してみましたが、
「sql_variant データ型から smalldatetime データ型への暗黙的な変換は許可されません。」と、怒られてしまいました。
念のため、Option Strictをオフにしてみましたが駄目でした。

他に方法があれば、宜しくお願いいたします。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-18 18:06
簡単なサンプルを作ってためしてみたのですが確かにSqlDbType.Variantだとエラーが
でました。申し訳ない

ただこっちで作ったサンプルでは普通にDBNull.Valueを渡せました。

St_Test @SyoriDate
というストアドがある場合

コード:

sqlCommand1.CommandText = "St_TEST";
sqlCommand1.CommandType = CommandType.StoredProcedure;
sqlCommand1.Parameters.Add( "@SyoriDate", SqlDbType.SmallDateTime ).Value = DBNull.Value;
sqlCommand1.ExecuteNonQuery();




で問題なく動きました

Parameters.Addで指定してあるパラメータ名とストアドのパラメータ名は一致してますか?

バレル
会議室デビュー日: 2003/12/24
投稿数: 8
投稿日時: 2004-02-18 19:06
ゆうじゅん様

わざわざサンプルまで作って検証して頂き、有難う御座いました。

原因の切り分けの為に、他の部分をバッサリ削除してテストして見ました所
こちらでもあっさり動いてしまいました。
「"型 'DBNull' から型 'Integer' へのキャストが有効ではありません。"」
というのは、どうやら他でエラーを拾っていたようです。
('Integer'と言われた時点で気付くべきでした・・・。)

WindowsフォームからXML WEBサービスを経てSQL Serverという構成の為、
デバッグが煩雑で、しっちゃかめっちゃかになっておりました。

お騒がせ致しまして本当に申し訳ありません。
これに懲りませず、又よろしくお願いいたします。

お詫び方々、お礼まで。
1

スキルアップ/キャリアアップ(JOB@IT)