標籤:c# base sof logs message 兩種 microsoft on() nta
前言
最新項目需要經常和dbf檔案打交道,在實際情境中很多軟體需要和一些老的系統進行資料互動,而這些系統都在使用foxpro資料庫,讀取dbf檔案一般都是分為兩種情況:第一;安裝foxpro的驅動進行讀取,第二;不安裝驅動,使用ODBC進行讀取。
具體如何設定DBF / FoxPro連接字串,可以參考一下這篇文章(https://www.connectionstrings.com/dbf-foxpro/)
方案一:安裝foxpro驅動
可以到微軟官網(https://www.microsoft.com/en-us/download/details.aspx?id=14839)下載檔案“VFPOLEDBSetup.msi”進行安裝。再使用代碼讀取,如下所示:
1 string filePath = @"C:\Temp\test.dbf"; //檔案路徑,如:C:\Temp\test.dbf 2 FileInfo fileInfo = new FileInfo(filePath); 3 string directoryName = fileInfo.DirectoryName; //檔案夾目錄 4 string fileName = fileInfo.Name; 5 6 OleDbConnection conn = new OleDbConnection(); 7 string connStr = @"Provider=VFPOLEDB.1;Data Source=" + directoryName + ";Collating Sequence=MACHINE"; 8 conn.ConnectionString = connStr; 9 conn.Open();10 11 string strSql = @"SELECT * FROM " + fileName;12 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);13 DataTable dt = new DataTable();14 da.Fill(dt);
方案二:不安裝驅動,使用ODBC讀取
1 private void button1_Click(object sender, EventArgs e) 2 { 3 try 4 { 5 string directoryPath = @"C:\Temp";//存放的dbf檔案夾目錄。 6 string fileName = @"test.dbf";//dbf的檔案名稱,這裡比如是test.dbf 因為這裡做為表名,所以尾碼.dbf可以省略,直接是test也可以的。 7 string strConn = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" + directoryPath; 8 9 System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection();10 odbcConn.ConnectionString = strConn;11 odbcConn.Open();12 13 string strSql = @"SELECT * FROM " + fileName;14 15 OdbcDataAdapter oda = new OdbcDataAdapter(strSql, odbcConn);16 DataTable dt = new DataTable();17 oda.Fill(dt);18 19 dataGridView1.DataSource = dt;20 odbcConn.Close();21 }22 catch (Exception ex)23 {24 MessageBox.Show(ex.Message);25 }26 }ODBC讀取異常問題
實際過程當中,我們經常會碰到一個問題即:提示Microsoft Jet 資料庫引擎找不到對象的問題。
但是!檢測了N遍,名稱和路徑都是沒有錯的,網上也查了很多相關資料,但是都沒有得到解決(問題是一樣,但是解決方案無效)。經過反覆測試,終於發現問題的所在:dbf檔案名稱不能超過8個字元,一旦超過8個字元,就會報這樣的錯。(為什麼會這樣不得而知~%>_<%)
解決方案:將dbf檔案名稱控制在8個字元以內,暫時找不到更好的辦法
PS:如有疑問,請留言,未經允許,不得私自轉載,轉載請註明出處:http://www.cnblogs.com/xuliangxing/p/7690709.html
C# 解決讀取dbf檔案,提示Microsoft Jet 資料庫引擎找不到對象的問題