首页 新闻 会员 周边 捐助

dbf Jet 数据库引擎找不到对象

0
悬赏园豆:20 [已关闭问题]

我发现当dbf文件的长度超过8的时候,使用OleDbCommand 查询就会出现“jet 数据库引擎找不到对象”的错误,我搜索到(http://space.cnblogs.com/question/2046/)说解决了这个问题,方法是将表的名字加个中括号。但是我在尝试的时候这个方法似乎无效啊.

string filepath=@"F:\shapefile\chzhXiaoqu.dbf";
string dir = System.IO.Path.GetDirectoryName(filepath);
string file = "["+ System.IO.Path.GetFileName(filepath)+"]";//加不加中括号都不行啊
string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=DBASE 5.0;Persist Security Info=False", dir);
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
string selectText = string.Format("SELECT * FROM {0}", file);

OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(selectText, conn);
System.Data.DataTable table = new System.Data.DataTable();
adapter.Fill(table);//这行就出错了,怎么回事呢?

xiangeboy的主页 xiangeboy | 初学一级 | 园豆:180
提问于:2009-06-08 22:18
< >
分享
其他回答(1)
0

string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=DBASE 5.0;Persist Security Info=False", dir);

你看你这个格式化的连接字符串,参数为什么用dir?dir是目录名,不包括路径及文件名,对于你的程序来说,dir变量的值就是"shapefile",程序怎么可能找到数据库文件在哪?

把dir换为filepath应该就可以了,这里需要使用完整绝对路径才对。

 

还有你这句:string selectText = string.Format("SELECT * FROM {0}", file);

file是数据库的文件名,又不是数据库里的表名,在你的程序中file变量的值就是"chzhXiaoqu.dbf",你把它弄进查询语句干什么?要换成一个数据库内的表名啊。

 

dir和file变量都是无意义的,删除这两个变量吧。

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-09 02:17
0

我也赞成楼上的

陳修君 | 园豆:480 (菜鸟二级) | 2009-06-09 08:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册