我正在尝试使用* .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);
}
}
答案 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]方括号括起来。