如何从类型Dbnull转换为日期类型

时间:2019-01-04 09:35:10

标签: vb.net date dbnull

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 有人知道如何解决这个问题吗?

2 个答案:

答案 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))