OleDbDataReader.GetString Исключение - указанное приведение недопустимо - PullRequest
0 голосов
/ 04 ноября 2011

Когда мое приложение C # (.NET 3.5) пытается получить доступ к базе данных MS Access 2007, метод OleDbReader.GetString() вызывает исключение:

Указанный состав недействителен.

Что я делаю не так?

OleDbCommand cmd = null;
OleDbDataReader reader = null;
String queryString = "SELECT ids.ENUM_H, bas.[BAS BACnet Object Type/Instance] FROM [OV2 BAS] AS bas INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID]";

this.Open();

try
{
    cmd = new OleDbCommand(queryString, this._conn);
    reader = cmd.ExecuteReader();

    if (!reader.HasRows)
    {
        Exception e = new Exception("Read of mapping table returned no results.");
        throw e;
    }
    else
    {
        while (reader.Read())
        {
            Int32 index;
            String classTypeString = null; // = reader.GetString(reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME)).Substring(0, 2);
            int it = reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME);
            string st = reader.GetString( it );  // <-- **Exception is thrown here** <--
            st = st.Substring(0,2);
            String classIdString = reader.GetString(reader.GetOrdinal(MappingTable.OBJECT_IDENTIFIER_COLUMN_NAME)).Substring(2);

            index = Convert.ToInt32(classIdString);
            ClassIds[index, 0] = reader.GetString(reader.GetOrdinal("ENUM_H"));
            ClassIds[index, 1] = classTypeString;
        }
    }
}
catch (Exception e)
{
    Console.WriteLine("ERROR: " + e.Message);
    Console.WriteLine(e.ToString());
    throw e;
}

this.Close();

Я знаю, что методы Open() и Close() работают. Что-то не так с моим запросом или с тем, как я обрабатываю результаты. Спасибо.

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Хорошо, значит, reader.IsDBNull(1) возвращает true ... что означает, что в этой конкретной строке нет данных для этого поля.

Вам необходимо разобраться, что это значит, и обработать это соответствующим образом.Возможно, вы захотите изменить запрос, чтобы он не включал такие строки, или использовать от reader.IsDBNull до обнаружения таких строк и действовать соответствующим образом, например, используя значение по умолчанию для поля.

0 голосов
/ 12 августа 2014

Иногда это происходит из-за формата ячейки. Если ваш формат ячейки установлен на General , вам следует изменить его на Text .

...