- PR -

parameterの値にDBNullが設定されている場合のUpdateについて

1
投稿者投稿内容
mi_pokke
会議室デビュー日: 2008/08/18
投稿数: 2
投稿日時: 2008-08-18 18:18
下記開発環境でWindowsアプリケーションを作成しています。
 SQLServer2005
 VB2005

SqlCommandにParameterを設定してデータベースに更新をかけたいのですが、
Parameterに設定された値がDBNullの場合、うまく更新がかかりません。
以下が簡略したソースとなります。
DataGridView上で内容が変更されていた場合に当該ファンクションが
呼び出されます。
Where句に設定される@param4の値にDBNullが設定された場合に、
戻り値=0(影響を受けた件数)となり、Updateがかからない状態です。

WHERE句に設定されるパラメータがDBNullの場合は、どのようにすれば良いか
お教えください。

Private Function SubmitUpdate(ByVal row As DataRow, _
ByVal con as SqlClient.SqlConnection) As Integer


Dim strSQL As String

strSQL = "UPDATE dbo.社員マスタ " & _
" SET 社員番号 = @param1,退職日= @param2" & _
" WHERE 社員番号 = @param3 and 退職日 = @param4 "

Dim cmd As New SqlClient.SqlCommand(strSQL, con)
Dim pc As SqlClient.SqlParameterCollection = cmd.Parameters

'更新後データ
pc.Add("@param1", SqlDbType.VarChar)
pc.Add("@param2", SqlDbType.SmallDateTime)

'更新前データ
pc.Add("@param3", SqlDbType.VarChar)
pc.Add("@param4", SqlDbType.SmallDateTime)

pc("@param1").Value = row("社員番号")
pc("@param2").Value = row("退職日")
pc("@param3").Value = row("社員番号", DataRowVersion.Original)
pc("@param4").Value = row("退職日", DataRowVersion.Original)

Return cmd.ExecuteNonQuery

End Function


やじゅ
常連さん
会議室デビュー日: 2008/07/15
投稿数: 28
お住まい・勤務地: 静岡市
投稿日時: 2008-08-18 18:30
Where句に設定される@param4の値にDBNullが設定された場合に、
戻り値=0(影響を受けた件数)となり、Updateがかからない状態です。

退職日 = @param4

(退職日 = @param4 OR (退職日 IS NULL AND @param4 IS NULL))


[ メッセージ編集済み 編集者: やじゅ 編集日時 2008-08-18 18:32 ]
mi_pokke
会議室デビュー日: 2008/08/18
投稿数: 2
投稿日時: 2008-08-18 18:55
(退職日 = @param4 OR (退職日 IS NULL AND @param4 IS NULL))
上記コードでできました。
考えつきませんでした。
ありがとうございます。

退職日 IS NULL AND @param4 IS NULL の @param4 IS NULLが
SQLとして認識できるとは驚きです。
1

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