dBase IV出现奇怪的错误,无法获得* .dbf作为表对象

时间:2013-10-03 09:28:24

标签: c# oledb jet dbf dbase

我正在尝试使用* .dbf(dBase IV)文件从中获取一些所需的地理数据(shapefile)。

奇怪的是,dBase JET OleDb 4.0提供商告诉我,没有这样的对象,但确实存在!

证明:

http://s21.postimg.org/eaj4h91uv/image.png

源代码:

    static void Test()
    {
        const string path = "C:\\buildings.dbf";
        string conStr = String.Format("Provider = Microsoft.Jet.Oledb.4.0; Data Source = {0}; Extended Properties = \"dBase IV\"", Path.GetDirectoryName(path));

        var connection = new OleDbConnection(conStr);
        connection.Open();

        var command = new OleDbCommand(string.Format("select NAME from {0}", Path.GetFileName(path)), connection);

        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                var str = (string)reader["NAME"];
            }
        }

        connection.Close();
    }

    static void Main()
    {
        try
        {
            Test();
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc);
        }
    }

1 个答案:

答案 0 :(得分:1)

它显示你有一个很好的连接字符串...连接字符串应该指向.dbf文件所在的PATH ONLY。但是,即使作为测试,在C:\ MIGHT的ROOT中将此.dbf文件作为一个问题,我也会咧嘴笑,只需将其移到根目录下的子文件夹中,例如C:\ TEST \ buildings.dbf

接下来,查询一旦连接打开到当前“路径”,它就可以看到该路径中的任何.dbf表。你应该只需要

var command = new OleDbCommand("select NAME from buildings", connection);

查询时隐含“.dbf”。可能造成问题的唯一另一个问题是'NAME'是一个保留字,可能需要name(tics)缠绕它,因此它知道实际的COLUMN NAME而不是保留字。

不同的提供商可能会对tic标记产生问题,因此您可能需要用[name]方括号括起来。