2 回答

TA貢獻1809條經驗 獲得超8個贊
稍微調整一下你的代碼..
改進
更改了您的連接字符串,添加HDR=Yes;了指示第一行包含列名并且IMEX=1;告訴驅動程序始終將“混合”(數字、日期、字符串等)數據列作為文本讀取的內容。在使用員工數據庫時,這些通常很有幫助。
問題
添加了變量以使其更清晰和完整的 xls 數據庫文件路徑。
按照上面其他幫助用戶的評論中的建議,添加了一個$afterSheet1并用 [] 包裝。[Staff Number]
添加oleDbDataReader.Read()以通讀結果,因為上面的代碼中也缺少它。
下面的示例代碼對我有用。
try
{
var xlsDbPath= "C:\\Temp\\Test.xls"; //<-- Full name of path
var connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsDbPath+ ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
var query = "SELECT * FROM [Sheet1$] WHERE [Staff Number] = 1234"; //<-- Add $ after Sheet1 and fix 'Staff Number'?
using (var con = new OleDbConnection(connStr))
{
con.Open();
using (var oleDbCommand = new OleDbCommand(query, con))
{
using (var oleDbDataReader = oleDbCommand.ExecuteReader())
{
while (oleDbDataReader.Read()) //Read through results
{
TxtDateOfBirth.Text = oleDbDataReader.GetString(1);
TxtName.Text = oleDbDataReader.GetString(2);
//... //Remember if value is not string you will get error
//... //so if not string use .GetValue(1).ToString();
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

TA貢獻1995條經驗 獲得超2個贊
在我看來,您的代碼中存在一些問題:
1- 您應該將 Excel 文件的完整地址放在您的連接中,而不是“test.xls”。
2- 您的命令中“Staff”和“Number”之間有一個空格。如果列名是“StaffNumber”,則不應有任何空格。我建議您先測試不帶 where 子句的命令。
- 2 回答
- 0 關注
- 154 瀏覽
添加回答
舉報