ODBC数据检索问题

本文关键字:问题 检索 数据 ODBC | 更新日期: 2023-09-27 18:25:54

我写了一个应用程序来从ProviderX数据库中提取数据,过了一段时间,我注意到一些字段返回null,尽管我知道它们中有数据。我在Excel/MS查询中确认了这一点。

我不知道自己可能做错了什么,所以我拿出了直接处理查询的代码,并在自己的项目中运行它。它正确地提取了数据,尽管实际应用程序中的代码是相同的。

在我的应用程序中,我同时使用ODBCDataAdapter和ODBCDataReader。我使用适配器。首先填充(),如果失败,应用程序将使用读取器。这两者都有我上面概述的相同行为:在应用程序内部,他们无法正确检索某些字段,在应用程序外部,他们自己按预期工作。

有人能给我指出一些可能导致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);
}

为什么有区别??

ODBC数据检索问题

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

恐怕我还不能说为什么该字段与ODBC不兼容,仍在等待供应商的消息(甚至不确定我是否会)。我知道这个ProviderX数据库是一个平面文件数据库,所以我想他们对那个特定字段的设置很糟糕。

我希望这能帮助其他人,他们可能会发现自己正在处理这样一个模糊的数据库。。。