If IsDBNull(dgv_datapasien.Rows(i).Cells(11).Value.ToString) Then
tglcetak = dgv_datapasien.Rows(i).Cells(11).Value.ToString
With dgv_datapasien.Rows(iRowIndex)
cmdData.CommandText = "Update tabelpasien set no_lab ='" + .Cells(1).Value.ToString + "', no_rm ='" + .Cells(2).Value.ToString + "'
, nama ='" + .Cells(3).Value.ToString + "',jeniskelamin ='" + .Cells(5).Value.ToString + "'
, status ='" + .Cells(6).Value.ToString + "', tglmasuk ='" & FormatTglUniversal(.Cells(8).Value) & "'
, ruangasal ='" + .Cells(7).Value.ToString + "' ,dokterpengirim='" + .Cells(9).Value.ToString + "'
,analis='" + .Cells(10).Value.ToString + "',umur ='" + .Cells(4).Value.ToString + "',analyzer='" + .Cells(0).Value.ToString + "'
where no_lab ='" + .Cells(1).Value.ToString + "'"
' ,tglcetak='" & FormatDateNull(.Cells(11).Value) & "'
End With
cmdData.ExecuteNonQuery()
End If
我需要通过单击按钮更新从datagridview更新数据库。 该字段之一是有关datePrint的。 但是,有时候,我的日期记录是dbnull。 所以我有更新数据库的问题,因为datePrint是dbnull。 我的代码始终显示“从类型'DbNull'到'日期'类型的转换无效” 供参考:我使用postgresql 有人知道如何解决这个问题吗?
答案 0 :(得分:0)
在构建SQL查询期间,应检查datePrint单元,如果源值为null,则将相应的列(在您的情况下为tglcetak
)设置为NULL,否则将其设置为日期值。
假设源网格单元格(11)包含datePrint值:
With dgv_datapasien.Rows(iRowIndex)
cmdData.CommandText = "Update tabelpasien set no_lab ='" + .Cells(1).Value.ToString +
"', no_rm ='" + .Cells(2).Value.ToString +
"', nama ='" + .Cells(3).Value.ToString +
"', jeniskelamin ='" + .Cells(5).Value.ToString +
"', status ='" + .Cells(6).Value.ToString +
"', tglmasuk ='" & FormatTglUniversal(.Cells(8).Value) &
"', ruangasal ='" + .Cells(7).Value.ToString +
"', dokterpengirim='" + .Cells(9).Value.ToString +
"', analis='" + .Cells(10).Value.ToString +
"', umur ='" + .Cells(4).Value.ToString +
"', analyzer='" + .Cells(0).Value.ToString + "'"
If IsDBNull(.Cells(11).Value) Then
cmdData.CommandText &= ",tglcetak=NULL"
Else
cmdData.CommandText &= ",tglcetak='" & FormatTglUniversal(.Cells(11).Value) & "'"
End If
cmdData.CommandText &= " where no_lab ='" + .Cells(1).Value.ToString + "'"
End With
cmdData.ExecuteNonQuery()
我不知道您的FormatDateNull
函数返回什么,因此在上面我不使用它。我假设您的函数FormatTglUniversal
将日期字符串格式化为postgresql日期格式。
我建议您习惯使用参数化查询来提高安全性和性能,因为此处的代码位于循环内。
答案 1 :(得分:-1)
确保数据库中的“日期字段”允许为空
在将参数传递给数据库时使用以下格式
数据库的输入参数= (dateprint == DBNull.value?null:(DateTime?)convert.toDateTime(dateprint))