C#DBF文件错误System.Data.OleDb.OleDbException

时间:2014-01-21 22:41:56

标签: c# dbf oledbdataadapter

我正在开发一个C#程序,它将读取DBF文件并将表导入MySQL数据库。我能够获取所有DBF文件的目录'位置和读取大多数DBF文件。问题是17个DBF文件中有2个会抛出myDataAdapter.Fill(myDataSet)的异常;

这是我的代码:

private void button2_Click(object sender, EventArgs e)
{
    DirectoryInfo dir = new DirectoryInfo(Regex.Replace(textBox1.Text, @"\\", @"\\"));
    string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBase III";
    DataSet myDataSet = new DataSet();
    OleDbConnection myAccessConn = null;

    try
    {
        myAccessConn = new OleDbConnection(strAccessConn);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
        return;
    }

    foreach (FileInfo file in dir.GetFiles())
    {
        MessageBox.Show(file.Name.Substring(0, file.Name.Length - 4));
        string strAccessSelect = "SELECT * FROM " + file.Name.Substring(0, file.Name.Length - 4);
        OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

        myAccessConn.Open();
        myDataAdapter.Fill(myDataSet);

        myAccessConn.Close();

    }
    MessageBox.Show("End");
}

这些是错误讯息:

未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll

其他信息:Microsoft Jet数据库引擎无法找到对象' SomeFile'。确保对象存在,并且您正确拼写其名称和路径名称。

造成这种情况的原因是什么?我已打印出dir,file.name和strAccessSelect,所有内容看起来都拼写正确。

非常感谢任何帮助,谢谢!

- UPDATE -

我检查了文件权限,每个用户都拥有完全权限。

不确定这会有多大帮助,但有时当我重命名文件时(例如:SomeFile1)它会起作用,我不会收到错误信息......大部分时间这都不起作用。

2 个答案:

答案 0 :(得分:0)

我会尝试使用Path.GetFileNameWithoutExtension来确保文件名正确

string strAccessSelect = "SELECT * FROM " + Path.GetFileNameWithoutExtension(file.Name);
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);

如果这不起作用,唯一可能的原因是某个其他进程锁定的文件或权限问题

答案 1 :(得分:0)

问题是strAccessConn。我不得不使用以下代码:

if ((file.Name.Substring(0, file.Name.Length - 4) == "SomeFile1") || (file.Name.Substring(0, file.Name.Length - 4) == "SomeFile2"))
{
    strAccessConn = @"Provider=vfpoledb;Data Source=" + dir + ";Collating Sequence=machine;";
}
else
{
    strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBase IV";
}

每个文件都需要不同的连接字符串