0

我编写了一个应用程序来从 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);
}

为什么不一样??

4

1 回答 1

0

好的,经过大量测试,我将问题缩小到单个 Date 字段,该字段以某种方式抛出了整个查询。我通过在查询 ProvideX 数据库时添加一条跳过该列的规则来处理这个问题。

恐怕我还不能说为什么该字段不能与 ODBC 相处,仍在等待供应商的消息(甚至不确定我是否会这样做)。我确实知道这个 ProvideX 数据库是一个平面文件数据库,所以我猜他们的那个特定字段设置得不好。

我希望这可以帮助其他可能发现自己正在处理这样一个晦涩的数据库的人......

于 2013-09-10T21:13:32.837 回答