我编写了一个应用程序来从 ProvideX 数据库中提取数据,过了一会儿我注意到一些字段返回 null,即使我知道它们中有数据。我在 Excel/MSQuery 中确认了这一点。
我无法弄清楚我可能做错了什么,所以我把直接处理查询的代码拿出来,并在它自己的项目中运行它。它正确地提取了数据,即使它是实际应用程序中的相同代码。
在我的应用程序中,我同时使用 ODBCDataAdapter 和 ODBCDataReader。我首先使用adapter.Fill(),如果失败,应用程序使用阅读器。这两者都具有我上面概述的相同行为:在应用程序内部它们无法正确检索某些字段,在应用程序外部它们按预期工作。
谁能指出一些可能导致 ODBC 内容出现此类问题的可能性?
我想我应该澄清一下,我不是在问我的代码有什么问题,而是关于可能导致 ODBC 框架出现此问题的一般故障排除提示。
编辑 :
好的,让我在这里添加更多信息...
主要问题似乎出在 DataReader 代码中,特别是 Read() 方法。出于某种原因,在我的应用程序中,Read() 方法至少需要一秒钟才能执行,而且很多时候需要超过 3 秒钟。相比之下,在我的应用程序之外,整个查询代码(包括填充 DataTable)在 30 秒内运行。这是大约 3000 行 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);
}
为什么不一样??