您的位置:首页 > 数据库

【转】ADO.NET连接访问dbf数据库问题

2012-08-02 23:57 627 查看
from:http://space.cnblogs.com/question/7423/


悬赏园豆:20 [已解决问题] 浏览: 2067次

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

string mailto:filepath=@%22F:\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 | 初学一级 | 园豆: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变量都是无意义的,删除这两个变量吧。

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

0

我也赞成楼上的

回复 | 陳修君 | 园豆:480 (菜鸟二级) | 2009-06-09 08:26

===================================================================

===================================================================

如果不清楚连接字符,查看这个网站:http://www.connectionstrings.com/

Visual FoxPro OLE DB, OleDbConnection (.NET)

Database container (.DBC):

"Provider=vfpoledb.1;Data Source=C:\MyDbFolder\MyDbContainer.dbc;Collating Sequence=machine "

Free table directory:

"Provider=vfpoledb.1;Data Source=C:\MyDataDirectory\;Collating Sequence=general "

Force the provider to use an ODBC DSN:

" "Provider=vfpoledb.1;DSN=MyDSN " "
Read more (Microsoft msdn) > >
ODBC

Database container (.DBC):

"Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\myvfpdb.dbc;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO "

Free Table directory:

"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\myvfpdbfolder;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO "
"Collate=Machine " is the default setting, for other settings check the list of supported collating sequences > >
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: