2013-08-01 4 views
0

Я написал приложение для извлечения данных из базы данных 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); 
} 

Почему разница ??

+0

Вы гораздо больше шансов получить помощь здесь, если Вы отправляете по крайней мере, минимальное количество кода, необходимого для демонстрации вашей проблемы , – kenrogers

+0

Конечно, но вы прочитали мой вопрос? Я не уверен, что проблема заключается в моем запросе кода, потому что он работает в одном месте и не в другом, поэтому мой вопрос был о том, что может быть некоторыми основными причинами такого. Это затрудняет определение того, какой код поставить в мой вопрос .... –

+0

Да, я прочитал ваш вопрос. Мое утверждение состоит в том, что на него трудно дать ответ с данной информацией. Принимая во внимание еще раз, я соглашусь с тем, что может быть сложно определить, какой код имеет значение. У вас есть какие-либо компиляции или ошибки времени выполнения или предупреждения, которые могут помочь? Вы пробовали отлаживать, чтобы узнать, может ли это дать вам дополнительную информацию? – kenrogers

ответ

0

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

Боюсь, я еще не могу сказать, почему это поле не ладит с ODBC, все еще ожидая услышать от продавца (даже не уверен, что когда-либо буду). Я знаю, что эта база данных ProvideX представляет собой плоскую файловую базу данных, поэтому я думаю, что у них было определенное поле, настроенное плохо.

Я надеюсь, что это помогает другим, кто может найти себе дело с такой туманной базы данных ...