2011-11-30 59 views
4

试图做一些工作,阅读和写作DBF文件,我发现这个样本:http://www.aspcode.net/reading-dbf-files-in-cDBF文件与破折号不工作

System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection(); 
oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=D:\databases\;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"; 
oConn.Open(); 
System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand(); 
oCmd.CommandText = @"SELECT * FROM D:\databases\thefile.dbf" ; 
DataTable dt = new DataTable(); 
dt.Load(oCmd.ExecuteReader()); 
oConn.Close(); 

dataGridView1.DataSource = dt; 

唯一的问题是,如果该文件或文件夹名称有一个破折号它不工作( - ) 在里面。有没有办法让这个查询在名称中使用破折号?

例如。 DBF文件:C:\Temp\bowlpos\07-10\01-07-10.DBF

+0

对不起,我会包括片段。 – dkarzon

+0

如果你在连接字符串中指定了文件夹和数据库类型,你应该可以''用'[''''''''''从'[带有连字符的文件]'(不包括驱动器和文件夹) 。 –

+0

然后我得到这个异常: '错误[42S02] [Microsoft] [ODBC dBase驱动程序] Microsoft Jet数据库引擎找不到对象'05 -05-11.DBF'。确保该对象存在,并且正确拼写其名称和路径名.' 只需使用:SELECT * FROM [05-05-11.DBF] 将config文件夹设置为该文件夹。 – dkarzon

回答

1

试试下面

using (OleDbConnection cn = new OleDbConnection(
    @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
    @"Data Source=C:\Temp\bowlpos\07-10\01-07-10.DBF;" + 
    @"Extended Properties=dBASE III;")) 
using (OleDbCommand cm = cn.CreateCommand()) 
{ 
    cn.Open(); 
    cm.CommandText = "SELECT * FROM [01-07-10]"; 
    DataTable dt = new DataTable(); 
    dt.Load(cm.ExecuteReader()); 
    dataGridView1.DataSource = dt; 
} 
+0

给了一个尝试,并得到以下异常: ''C:\ Temp \ bowlpos \ 07-10 \ 01-07-10.DBF'不是一个有效的路径。确保路径名拼写正确,并且您已连接到文件所在的服务器。“# – dkarzon

+0

@ d1k_is,对UnhandledException的帖子进行微调。不要在连接源字符串中包含.DBF名称。只包含通往dbf的路径。查询将在它连接的FOLDER中查找并查找[01-07-10] dbf文件。我认为这只是一个复制/粘贴错误。 – DRapp