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


     
    悬赏园豆: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);//这行就出错了,怎么回事呢?

     

     


     


    提问于: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   > >

     
     
     
     
  • 相关阅读:
    MySql性能调优三(explain/desc执行计划)
    MySql性能调优二(BTree、B+Tree与索引数据结构)
    MySql性能调优一(存储引擎InnoDB,MyISAM)
    PHP 数组底层实现原理
    哈希算法及其应用场景
    散列表、散列函数和散列冲突
    PHP中的XML解析的5种方法
    特殊的线性表:递归
    Navicat12破解教程(Navicat_Keygen_Patch_By_DFoX V5.6)
    svn服务端安装、迁移教程、Eclipse切换svn连接库
  • 原文地址:https://www.cnblogs.com/SummerRain/p/2620835.html
Copyright © 2020-2023  润新知