C#DBF错误打开

时间:2014-02-05 23:23:23

标签: c# odbc dbf

我正在尝试编写一个程序来读取DBF文件并将其放入数据表中。我没有太多使用FoxPro数据库的经验。 下面是打开dbf的函数。我将文件名传递给函数。

private DataTable loadFile(string FileName)
{
    System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
    conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};Deleted=1";
        DataTable dt = new DataTable();
    try
    {
        conn.Open();
        System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand();
        comm.CommandText = @"SELECT * FROM " + @FileName;

        comm.Connection = conn;

        dt.Load(comm.ExecuteReader());
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally{
        conn.Close();
    }
    return dt;

}

文件名的变量是

"C:\\Users\\psun\\Desktop\\New folder\\plog.DBF"

在运行时我收到此错误

    ERROR [42000] [Microsoft][ODBC dBase Driver] Syntax error in FROM clause.
   at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.Odbc.OdbcCommand.ExecuteReader()
   at UpLoad.Form1.loadExcel(String FileName) in c:\Users\psun\Documents\Visual Studio 2012\Projects\PLOGReader\PLOGReader\Form1.cs:line 60

3 个答案:

答案 0 :(得分:2)

首先,如果你正在使用Foxpro表,我不会使用dBase驱动程序。

Get the Microsoft Visual Foxpro OleDb Provider

其次,查看连接字符串。您不希望连接字符串提及实际的table.dbf,而只是提到数据库文件所在的PATH。然后,您的查询就像......一样简单。

从SomeTable中选择*

此外,还有很多其他Q& A与VFP和OleDB相关联。如果您专门针对我的用户ID和这些标签进行搜索,您将获得我在此处明确提出的问题列表。有很多来自运行脚本,简单查询,使用参数化查询等等。

以下是您可以放入的示例搜索... 用户:74195 [VFP] [OLEDB]

答案 1 :(得分:0)

尝试将文件名添加到ODBC连接字符串中。

http://www.connectionstrings.com/microsoft-dbase-odbc-driver/

conn.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};Deleted=1;dbq=C:\\Users\\psun\\Desktop\\New folder\\Plog.DBF";

对于表名,您可能需要“[schema.tableName]”,这是您的@FileName现在所在的位置。类似的东西:

comm.CommandText = @"SELECT * FROM [schema.tableName]";

答案 2 :(得分:0)

以完整路径和其他unscape方式删除空间。