zoukankan      html  css  js  c++  java
  • 【转】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   > >

     
     
     
     
  • 相关阅读:
    友盟上报 IOS
    UTF8编码
    Hill加密算法
    Base64编码
    Logistic Regression 算法向量化实现及心得
    152. Maximum Product Subarray(中等, 神奇的 swap)
    216. Combination Sum III(medium, backtrack, 本类问题做的最快的一次)
    77. Combinations(medium, backtrack, 重要, 弄了1小时)
    47. Permutations II(medium, backtrack, 重要, 条件较难思考)
    3.5 find() 判断是否存在某元素
  • 原文地址:https://www.cnblogs.com/SummerRain/p/2620835.html
Copyright © 2011-2022 走看看