powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / обработка значений Null
11 сообщений из 11, страница 1 из 1
обработка значений Null
    #32747568
Mikhail Eremkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код следующий
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
    Sub ОбновитьЖурнал()
        Dim JOURNAL As New DataTable
        Dim docQuality As New DataTable
        Dim KATMC As New DataTable

        Dim docRow As DataRow
        Dim newRow As DataRow

        Dim CMC As Int64
        Dim CMAT As Int64
        Dim NAMEMC As String
        Dim NAMEMAT As String
         '   ------------------------------------------------------------------- 
        JOURNAL = g_dataset.Tables("JOURNAL")
        docQuality = g_dataset.Tables("docQuality")
        KATMC = g_dataset.Tables("KATMC")

        УдалитьСтроки(JOURNAL)

        For Each docRow In docQuality.Rows
            Dim sRows As DataRow()
             '   --------------------------------------------------------------- 
            CMC = docRow.Item("CMC")
            CMAT = docRow.Item("CMAT")
            sRows = KATMC.Select("NREC = " & Str(CMC))
            If UBound(sRows) = - 1  Then
                NAMEMC = ""
            Else
                NAMEMC = sRows( 0 ).Item("NAMEMC")
            End If

            sRows = KATMC.Select("NREC = " & Str(CMAT))
            If UBound(sRows) = - 1  Then
                NAMEMAT = ""
            Else
                NAMEMAT = sRows( 0 ).Item("NAMEMC")
            End If
             '   --------------------------------------------------------------- 
            newRow = JOURNAL.NewRow
            With newRow
                .Item("NREC") = docRow.Item("NREC")
                .Item("NODOC") = docRow.Item("NODOC")
                .Item("DATDOC") = docRow.Item("DATDOC")
                .Item("NOPARTY") = docRow.Item("NOPARTY")
                .Item("NAMEMC") = NAMEMC
                .Item("NAMEMAT") = NAMEMAT
                .Item("KOL") = docRow.Item("KOL")
            End With
            JOURNAL.Rows.Add(newRow)
        Next
    End Sub

Выдается следующая ошибка: Cast from DBNull to ttype 'Long' is not valid в стоке CMC = docRow.Item("CMC"), если значение в поле Null.
что делать? как преобразовать к нужному формату?
...
Рейтинг: 0 / 0
обработка значений Null
    #32747580
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что то такое:
Код: plaintext
If Convert.IsDBNull(docRow.Item("CMC")) Then CMC =  0  Else CMC = docRow.Item("CMC")
...
Рейтинг: 0 / 0
обработка значений Null
    #32747634
Mikhail Eremkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь выдается следующее сообщение:

no default member for type DbNull
...
Рейтинг: 0 / 0
обработка значений Null
    #32747686
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в той же строке ?
...
Рейтинг: 0 / 0
обработка значений Null
    #32747701
Mikhail Eremkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да в этой же строке.
...
Рейтинг: 0 / 0
обработка значений Null
    #32747733
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воспроизвожу твою ситуацию и ... всё работает. т.е. если значение в колонке DBNull - то отрабатывает нормально

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim docQuality As DataTable = New DataTable("docQuality"), docRow As DataRow, CMC As Int64

docQuality.Columns.Add("CMC", Type.GetType("System.Int64"))

docRow = docQuality.NewRow()
docRow.Item("CMC") = DBNull.Value
docQuality.Rows.Add(docRow)

docQuality.AcceptChanges()

For Each docRow In docQuality.Rows
  If Convert.IsDBNull(docRow.Item("CMC")) Then CMC =  0  Else CMC = docRow.Item("CMC")
Next
...
Рейтинг: 0 / 0
обработка значений Null
    #32747778
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, мне выдали сообщение, что у меня нету прав на добавление сообщений в этот форум. Только попробуйте ещё раз - псевдоним поменяю.

Вот короче правильный ответ:

dim oTemp=docRow.Item("CMC")
CMC = iif(isnothing(otemp) or isdbnull(otemp),0,otemp)

Примечание: в vb6 были проблемы с функцией iif(), но в .net эти проблемы устранили.

Max Pro
...
Рейтинг: 0 / 0
обработка значений Null
    #32748170
Mikhail Eremkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, все работет.
...
Рейтинг: 0 / 0
обработка значений Null
    #32748874
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max ProПримечание: в vb6 были проблемы с функцией iif(), но в .net эти проблемы устранили.

Max Pro
О каких проблемах идет речь?
...
Рейтинг: 0 / 0
обработка значений Null
    #32748999
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компилирует, но выдаёт ошибку рантайм. Не помню какую.
Max Pro
...
Рейтинг: 0 / 0
обработка значений Null
    #32751377
lisichanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать еще так:

CMC = docRow.Item("CMC") & ""

или

CMC = docRow.Item("CMC") & String.Empty

Таким образом к значению будет добавлено "пусто" т.е. уже не Null
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / обработка значений Null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]