[英]C# Open DBF file
我在打開DBF文件時遇到問題 - 我需要打開它,讀取所有內容並進行處理。 我嘗試了幾個解決方案(ODBC / OLEDB),幾個連接字符串,但到目前為止沒有任何工作。
問題是,當我執行SQL命令從文件中獲取所有內容時,不返回任何內容 - 沒有行。 更奇怪的是,正在打開的DBF文件的內容被刪除。
看看我的代碼:
public override bool OpenFile(string fileName, string subFileName = "")
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path.GetDirectoryName(fileName) + ";Extended Properties=dBASE IV;User ID=;Password=;");
try
{
if (con.State == ConnectionState.Closed) { con.Open(); }
OleDbDataAdapter da = new OleDbDataAdapter("select * from " + Path.GetFileName(fileName), con);
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
int i = ds.Tables[0].Rows.Count;
return true;
}
catch
{
return false;
}
}
我調試了代碼並在Windows資源管理器中觀看了文件正在打開。 當它達到這條線時:
da.Fill(ds);
文件的大小只下降到幾個字節(從數百KB)。
我的下一個想法是讓DBF文件只讀。 然而,這會導致“來自外部驅動程序的意外異常”。
所以我的問題是 - 到底是什么? 我確定文件沒有損壞,它是從某些DB直接導出的。 (不,我無法訪問該數據庫)。 我也可以在MS Office中打開該文件沒問題。
我無法共享DBF文件 - 它包含機密數據。
兩件事......僅僅因為它的.DBF文件擴展名可能在晚上意味着它是一個Dbase IV文件。 它實際上可能是Visual Foxpro的。 也就是說,我會考慮從Microsoft下載下載和安裝Visual Foxpro OleDB驅動程序。 接下來,OleDbConnection指向具有實際表的路徑(您已經擁有該表)。
查詢本身,不應該關心擴展,所以我會改變你的調用,然后通過“Path.GetFileNameWithoutExtension”獲取名稱
它可能是兩者的結合。
VFP提供程序的連接字符串
"Provider=VFPOLEDB.1;Data Source=" + FullPathToDatabase
這不是確切的答案,但它可以幫助您找到問題。
嘗試提供內聯連接字符串並選擇查詢以確保問題不在於構建那些問題。 捕獲異常並檢查其詳細信息。
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=;Password=;"); // give your path directly
try
{
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter("select * from tblCustomers.DBF", con); // update this query with your table name
DataSet ds = new DataSet();
da.Fill(ds);
con.Close();
int i = ds.Tables[0].Rows.Count;
return true;
}
catch(Exception e)
{
var error = e.ToString();
// check error details
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.