Я написал приложение для извлечения данных из базы данных ProvideX, и через некоторое время я заметил, что некоторые поля возвращают null, хотя я знал, что у них есть данные. Я подтвердил это в Excel/MSQuery.ODBC Data Retrieval Issue
Я не мог понять, что я могу сделать неправильно, поэтому я вытащил код, который напрямую касается запроса, и запустил его в своем собственном проекте. Он правильно потянул данные, хотя это был тот же код в самом приложении.
В моем приложении я использую как ODBCDataAdapter, так и ODBCDataReader. Сначала я использую adapter.Fill(), и если это не удается, приложение использует читателя. Оба они имеют одно и то же поведение, описанное выше: внутри приложения они не могут правильно извлекать некоторые поля, вне приложения сами работают, как и ожидалось.
Может ли кто-нибудь указать мне на некоторые возможности, которые могут вызвать проблемы с ODBC?
Я думаю, я должен уточнить, что я не спрашиваю, что не так с моим кодом, но, скорее, общие рекомендации по устранению неполадок в отношении того, что может вызвать эту проблему для ODBC-инфраструктуры.
EDIT:
Хорошо, позвольте мне добавить некоторую информацию здесь ...
Основная проблема, как представляется, в коде DataReader, в частности, метод Read(). По какой-то причине внутри моего приложения метод Read() занимает как минимум секунду для выполнения и много раз занимает немного больше 3 секунд. Для сравнения, вне моего приложения весь код запроса, включая заполнение DataTable, длится менее 30 секунд. Это около 3 тысяч строк с 370 столбцами.
в то время как петля ...
// Column ordinals cached
// I pared down the code inside the while loop, populating a list of
// arrays (rows) to hold the raw data. This was the quickest way I
// could think of to do this. TryGetValue is an extension method
// that handles null exceptions.
while(reader.Read())
{
var arr = new object[reader.FieldCount];
for (i = 0; i < arr.Length; i++)
{
arr[i] = reader.TryGetValue(ordinals[i]);
}
rows.Add(arr);
}
Почему разница ??
Вы гораздо больше шансов получить помощь здесь, если Вы отправляете по крайней мере, минимальное количество кода, необходимого для демонстрации вашей проблемы , – kenrogers
Конечно, но вы прочитали мой вопрос? Я не уверен, что проблема заключается в моем запросе кода, потому что он работает в одном месте и не в другом, поэтому мой вопрос был о том, что может быть некоторыми основными причинами такого. Это затрудняет определение того, какой код поставить в мой вопрос .... –
Да, я прочитал ваш вопрос. Мое утверждение состоит в том, что на него трудно дать ответ с данной информацией. Принимая во внимание еще раз, я соглашусь с тем, что может быть сложно определить, какой код имеет значение. У вас есть какие-либо компиляции или ошибки времени выполнения или предупреждения, которые могут помочь? Вы пробовали отлаживать, чтобы узнать, может ли это дать вам дополнительную информацию? – kenrogers