У меня есть запрос, как показано ниже
SELECT NAME, MARKS, COUNT(*) AS TOTAL FROM STUDENTS GROUP BY NAME, MARKS
При повторении OdbcDataReader я сталкиваюсь с System.FormatException, код и трассировка стека были следующими:
Using dataReader As System.Data.Odbc.OdbcDataReader = CType(cmdODBCCommand.ExecuteReader(), System.Data.Odbc.OdbcDataReader)
While (dataReader.Read())
Dim stuName As String = dataReader.GetFieldValue(Of String)(0)
Dim stuMarks As String = dataReader.GetFieldValue(Of String)(1)
Dim stuCount As Int32 = dataReader.GetFieldValue(Of Int32)(2)<-- Exception here
' The entire database contains only 10 rows still getting the format exception.
' Also tried like below
'Dim x = dataReader.Item("Name")
'Dim y = dataReader.Item("Marks")
'Dim z = dataReader.Item("TOTAL") <-- Exception here
'Dim stuCount As Int64 = dataReader.GetFieldValue(Of Int64)(2)<-- Exception here
End While
End Using
Трассировка:
System.FormatException was caught
HResult=-2146233033
Message=Input string was not in a correct format.
Source=mscorlib
StackTrace:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Data.Odbc.OdbcDataReader.internalGetInt64(Int32 i)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap)
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i)
at System.Data.Common.DbDataReader.GetFieldValue[T](Int32 ordinal)
InnerException:
Кто-нибудь знает об этой проблеме и как от нее избавиться?
Я пробовал все решения, упомянутые по следующим URL-адресам:
Входная строка имела неверный формат. Convert.ToInt32(переменная)
Не удалось привести строку к типу int. Сообщение об ошибке: входная строка имеет неверный формат
InvalidCastException
вместоFormatException
. Кроме того, я сомневаюсь, что вы получите такое же исключение вdataReader.Item("TOTAL")
, потому что не задействовано приведение, которое может потерпеть неудачу. - person Tim Schmelter   schedule 03.12.2015c#
? - person Soner Gönül   schedule 03.12.2015dataReader.GetFieldValue(Of Int64)(3)
или найдите в отладчике типdataReader("TOTAL")
(что не должно привести к ошибке, иначе вы не показываете настоящий запрос/код). - person Tim Schmelter   schedule 03.12.2015GetFieldValue
не основан на нуле? Таким образом, вы бы выбрали GetFieldValue (0) до (2) - person Alex B.   schedule 03.12.2015dataReader.Item("TOTAL")
также вызывает исключение. Теперь вы утверждаете, что он вообще не оценивает. Что правильно? Что значит совсем не оценивает? - person Tim Schmelter   schedule 03.12.2015Dim z as String = dataReader.Item("TOTAL").ToString()
? - person Alex B.   schedule 03.12.2015dataReader.FieldCount
, чтобы убедиться, что у вас есть 3 поля, поскольку кажется, что вы не получаете 3. Возвращает ли ваш запрос то, что вы ожидаете, если вы запускаете его непосредственно в свою базу данных? Выдает лиdataReader.GetFieldType(2)
также исключение? Я предполагаю, что OpenText™ Search Server может не поддерживать Count...? - person Daniel   schedule 03.12.2015