簡體   English   中英

C#DBF文件錯誤System.Data.OleDb.OleDbException

[英]C# DBF file error System.Data.OleDb.OleDbException

我正在研究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.dll中發生了類型為'System.Data.OleDb.OleDbException'的未處理異常

附加信息:Microsoft Jet數據庫引擎找不到對象'SomeFile'。 確保對象存在,並且正確拼寫了它的名稱和路徑名。

是什么原因造成的? 我已經打印出dir,file.name和strAccessSelect,並且所有內容看起來都拼寫正確。

任何幫助將不勝感激,謝謝!

-更新-

我已經檢查了文件許可權,並且每個用戶都具有完全特權。

不確定這將有多大幫助,但是有時當我重命名文件(例如:SomeFile1)時它將起作用,並且我不會收到錯誤消息……在大多數情況下,它將不起作用。

我會嘗試使用Path.GetFileNameWithoutExtension以確保文件名正確

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

如果這不起作用,則唯一可能的原因是文件被其他進程鎖定或權限問題

問題是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";
}

每個文件需要不同的連接字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM