我編寫了一個應用程序來從ProvideX數據庫中提取數據,過了一段時間後我發現有些字段返回null,即使我知道他們有數據。我在Excel/MSQuery中證實了這一點。ODBC數據檢索問題
我無法弄清楚我可能會做錯什麼,所以我拿出了直接處理查詢的代碼,並將它運行在自己的項目中。它正確地拉取了數據,即使它在實際應用程序中是相同的代碼。
在我的應用程序中,我使用了ODBCDataAdapter和ODBCDataReader。我首先使用adapter.Fill(),如果失敗,應用程序將使用閱讀器。這兩種方式都具有與上面概述的相同的行爲:在應用程序內部,它們無法正確檢索某些字段,在應用程序之外它們自己按預期方式工作。
任何人都可以指向一些可能導致ODBC的東西有這樣的問題嗎?
我想我應該澄清一下,我不是問我的代碼出了什麼問題,而是一般的疑難解答提示,說明什麼可能會導致ODBC框架出現此問題。
編輯:
好吧,讓我在這裏補充一些詳細信息...
的主要問題似乎是在DataReader的代碼,特別是Read()方法。出於某種原因,在我的應用程序中,Read()方法需要至少一秒的時間才能執行,並且很多時間需要超過3秒。相比之下,在我的應用程序之外,整個查詢代碼(包括填充DataTable)在30秒內運行。這是大約3千行370列。
while循環...
// 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