Как конфертировать из типа Dbnull в тип Date - PullRequest
0 голосов
/ 04 января 2019
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' в тип 'Date' недопустимо" к вашему сведению: я использую postgresql Кто-нибудь знает, как это решить?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы должны проверить ячейку datePrint во время построения запроса SQL и установить для соответствующего столбца (в вашем случае 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.

Я бы порекомендовал вам привыкнуть к использованию параметризованного запроса для безопасности и производительности, поскольку ваш код находится внутри цикла.

0 голосов
/ 04 января 2019

Убедитесь, что в поле «Дата» в базе данных разрешено пустое значение

при передаче параметра в базу данных, используйте формат ниже

входной параметр базы данных = (dateprint == DBNull.value? Null:(DateTime?) convert.toDateTime (dateprint))

...