Обработка на VB.NET DataRow Входен низ не беше в правилен формат за нулева стойност

Преминавам през редовете на DataRowCollection и присвоявам полетата на всеки ред на променлива. Винаги получавам „Входният низ не е в правилен формат“, без значение как прехвърлям това. Просто имам нужда gapCd да съдържа 0, ако полето е null или стойността в противен случай. Изглежда IsDbNull не връща истина правилно. Също така опитах DbNull.Value сравнения без успех. Всяка помощ е много ценена.

Dim gapCd As Integer = IIf(IsDBNull(row("GAP_CD")), 0, row("GAP_CD"))

person Adam    schedule 30.09.2011    source източник
comment
Сигурни ли сте, че проблемът не е, че имате някъде нечислова стойност за GAP_CD?   -  person Jon Skeet    schedule 30.09.2011
comment
Редовете с данни се връщат от база данни на Oracle. Типът колона в базата данни е Number. Резултатите се връщат от пакет и колоната може да бъде нула. Не мисля, че проверявам правилно за нула. Дори опитах CInt() преди да присвоя, но без зарове. Някакви идеи?   -  person Adam    schedule 30.09.2011
comment
Първо бих разбрал дали това наистина е нулевият проблем или не. Например, какво се случва, ако филтрирате нули в заявката? Все още ли разбирате проблема? Обърнете внимание, че той прави анализ на низове, което не е идеално - със сигурност трябва да можете да изведете действителната стойност директно от реда с данни...   -  person Jon Skeet    schedule 30.09.2011


Отговори (1)


Не забравяйте, че като тип стойност, Integer вече е инициализирано на нула. Така че опитайте това:

Dim gapCd As Integer 
If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 

и ако това не работи, време е да опитате малко регистриране:

Dim gapCd As Integer
Try
    If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD"))
Catch Ex As Exception
    SomeLoggingFunction(row("GAP_CD").ToString())
End Try 

Видях това отново днес по някаква причина и при новото четене ми стана ясно, че всичко, което трябва да направите, е да премахнете едно „I“ от кода си, за да промените функцията IIf() на оператора If() и да принудите оценката на късо съединение:

Dim gapCd As Integer = If(IsDBNull(row("GAP_CD")), 0, row("GAP_CD"))
person Joel Coehoorn    schedule 30.09.2011