Можно ли программно определить (OLEDB), длина какого столбца превышена?

По какой-то причине я не могу открыть представление «Дизайн» рассматриваемой таблицы MS Access; Я могу смотреть на данные, но не на дизайн, в частности на длину столбцов.

Когда я пытаюсь вставить запись в указанную таблицу с этим кодом:

using (var conn = new OleDbConnection(connStr))
{
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = 
            @"INSERT INTO tx_header (tx, site_no, xmlfile, collect_dttm, ccr_user, tx_memo, file_beg, file_end) 
              VALUES(@txval, @siteNum, @xmlfileName, Now(), @ccrUser, @TXMemo, @strfile_beg, @strfile_end)";
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@txval", tx);
        cmd.Parameters.AddWithValue("@siteNum", site_no);
        cmd.Parameters.AddWithValue("@xmlfileName", xmlfile);
        cmd.Parameters.AddWithValue("@ccrUser", ccr_user);
        cmd.Parameters.AddWithValue("@TXMemo", tx_memo);
        cmd.Parameters.AddWithValue("@strfile_beg", file_beg);
        cmd.Parameters.AddWithValue("@strfile_end", file_end);
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

... Я получаю: "Исключение System.Data.OleDb.OleDbException было необработано кодом пользователя HResult=-2147217833 Message=Поле слишком мало, чтобы принять тот объем данных, который вы пытались добавить. Попробуйте вставить или вставить меньше данных . Source=Ядро базы данных Microsoft Office Access"

Вместо того, чтобы угадывать, в каком столбце слишком много данных, было бы неплохо, если бы я мог программно определить, какой столбец является проблемным. Могу я? Как?


person B. Clay Shannon    schedule 18.03.2014    source источник
comment
Вы изучали получение информации о схеме через стандартные пути ADO.NET? Нравится метод IDataReader.GetSchemaTable?   -  person Crono    schedule 18.03.2014
comment
Я также должен спросить: почему вы должны динамически получать спецификации своей базы данных для начала? Ваш код был бы намного надежнее, если бы он знал о типах полей базы данных, длинах и ограничениях с самого начала! :п   -  person Crono    schedule 18.03.2014
comment
@Crono: Вы правы, но, как уже упоминалось, когда я открываю файл MDB с помощью Access, он не позволяет мне видеть представление дизайна; Я не знаю почему.   -  person B. Clay Shannon    schedule 18.03.2014
comment
Скорее всего он просто заблокирован. Вы пытались открыть файл Access, удерживая клавишу Shift?   -  person Crono    schedule 18.03.2014


Ответы (2)


Существует довольно подробное объяснение того, как запросить информацию о базовой схеме в MSDN, начиная с Получение информации о схеме базы данных.

Отказ от ответственности: я никогда не пытался использовать это против базы данных Access.

person Edmund Schweppe    schedule 18.03.2014
comment
Спасибо; Я выпью немного тоника, пока попробую. - person B. Clay Shannon; 18.03.2014

После прочтения ваших комментариев выше мне стало ясно, что в вашем файле Access просто заблокированы представления конструктора. Обычно вы должны иметь возможность разблокировать их, просто удерживая Shift, дважды щелкнув файл и удерживая Shift, пока Access не запустится.

С этого момента у вас будет полный доступ к таблицам, запросам и т.п., а вместе с этим и к спецификациям вашей базы данных. Это будет намного лучше, чем пытаться получить доступ к этому динамически.

person Crono    schedule 18.03.2014
comment
Спасибо; это работает (хотя мне также по какой-то причине нужно щелкнуть правой кнопкой мыши имя файла и выбрать «Доступ», а не «Доступ через режим XP»). Итак, это решило мою проблему, но, поскольку г-н Тоник Уотер ответил на фактический вопрос... - person B. Clay Shannon; 18.03.2014
comment
Эдмунд действительно ответил на реальный вопрос и поэтому заслуживает баллов. Тем не менее, правильный вызов для вас здесь должен не получать сведения о базе данных динамически, а скорее применять правила проверки в вашем коде в соответствии с жестко известными спецификациями. ;) - person Crono; 18.03.2014