- - PR -
parameterの値にDBNullが設定されている場合のUpdateについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-08-18 18:30
Where句に設定される@param4の値にDBNullが設定された場合に、
戻り値=0(影響を受けた件数)となり、Updateがかからない状態です。 退職日 = @param4 ↓ (退職日 = @param4 OR (退職日 IS NULL AND @param4 IS NULL)) [ メッセージ編集済み 編集者: やじゅ 編集日時 2008-08-18 18:32 ] |
|
投稿日時: 2008-08-18 18:55
(退職日 = @param4 OR (退職日 IS NULL AND @param4 IS NULL))
上記コードでできました。 考えつきませんでした。 ありがとうございます。 退職日 IS NULL AND @param4 IS NULL の @param4 IS NULLが SQLとして認識できるとは驚きです。 |
1