ODBC数据检索问题

时间:2013-08-01 15:22:47

标签: c# odbc

我编写了一个从ProvideX数据库中提取数据的应用程序,过了一段时间我注意到有些字段返回null,即使我知道它们中有数据。我在Excel / MSQuery中证实了这一点。

我无法弄清楚我可能做错了什么,所以我拿出了直接处理查询的代码,并在自己的项目中运行它。它正确地提取了数据,即使它与实际应用程序中的代码相同。

在我的应用程序中,我使用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);
}

为什么差异?

1 个答案:

答案 0 :(得分:0)

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

我担心我还不能说为什么那个字段与ODBC不相处,仍然等着听到供应商的声音(甚至不确定我是否会这样)。我知道这个ProvideX数据库是一个平面文件数据库,所以我猜他们的特定字段设置得很糟糕。

我希望这可以帮助那些可能发现自己处理这样一个模糊数据库的人......