DBF文件中带有破折号的文件无法工作

4

我正在尝试读写DBF文件的一些工作,我发现了这个示例:http://www.aspcode.net/reading-dbf-files-in-c

该示例介绍如何通过C#编程语言来读取DBF文件。您可以在上述链接中下载示例代码并根据您的需要进行修改和使用。
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


抱歉,我将包含代码片段。 - dkarzon
如果您在连接字符串中指定了文件夹和数据库类型,那么您应该能够通过使用[]进行转义来仅选择SELECT * from [thefile-with-hyphens](而不包括驱动器和文件夹)。 - Ken White
我遇到了这个异常: ERROR [42S02] [Microsoft][ODBC dBase Driver] The Microsoft Jet database engine could not find the object '05-05-11.DBF'. Make sure the object exists and that you spell its name and the path name correctly. 只是用:SELECT * FROM [05-05-11.DBF] 并设置配置文件夹为该文件夹。 - dkarzon
我不明白那个异常。不过我认为@UnhandledException已经解决了它。 :) - Ken White
1个回答

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;
}

尝试了一下,得到了以下异常信息:'C:\Temp\bowlpos\07-10\01-07-10.DBF' 不是一个有效的路径。请确保路径名称拼写正确,并且您已连接到文件所在的服务器。 - dkarzon
@d1k_is,对UnhandledException的帖子进行了小调整。在连接源字符串中不要包含.DBF文件名,只包含到dbf的路径。查询将在它所连接的文件夹中查找[01-07-10] dbf文件。我认为这只是一个复制/粘贴错误。 - DRapp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接