Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / обработка значений Null / 11 сообщений из 11, страница 1 из 1
21.10.2004, 08:34
    #32747568
Mikhail Eremkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
код следующий
Код: 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
21.10.2004, 08:45
    #32747580
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
что то такое:
Код: plaintext
If Convert.IsDBNull(docRow.Item("CMC")) Then CMC =  0  Else CMC = docRow.Item("CMC")
...
Рейтинг: 0 / 0
21.10.2004, 09:21
    #32747634
Mikhail Eremkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
теперь выдается следующее сообщение:

no default member for type DbNull
...
Рейтинг: 0 / 0
21.10.2004, 09:49
    #32747686
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
в той же строке ?
...
Рейтинг: 0 / 0
21.10.2004, 09:56
    #32747701
Mikhail Eremkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
да в этой же строке.
...
Рейтинг: 0 / 0
21.10.2004, 10:14
    #32747733
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
воспроизвожу твою ситуацию и ... всё работает. т.е. если значение в колонке 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
21.10.2004, 10:31
    #32747778
Max Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обработка значений Null
Блин, мне выдали сообщение, что у меня нету прав на добавление сообщений в этот форум. Только попробуйте ещё раз - псевдоним поменяю.

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

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

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

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

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

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

или

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

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


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