2 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
稍微調(diào)整一下你的代碼..
改進(jìn)
更改了您的連接字符串,添加HDR=Yes;了指示第一行包含列名并且IMEX=1;告訴驅(qū)動(dòng)程序始終將“混合”(數(shù)字、日期、字符串等)數(shù)據(jù)列作為文本讀取的內(nèi)容。在使用員工數(shù)據(jù)庫時(shí),這些通常很有幫助。
問題
添加了變量以使其更清晰和完整的 xls 數(shù)據(jù)庫文件路徑。
按照上面其他幫助用戶的評論中的建議,添加了一個(gè)$afterSheet1并用 [] 包裝。[Staff Number]
添加oleDbDataReader.Read()以通讀結(jié)果,因?yàn)樯厦娴拇a中也缺少它。
下面的示例代碼對我有用。
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貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
在我看來,您的代碼中存在一些問題:
1- 您應(yīng)該將 Excel 文件的完整地址放在您的連接中,而不是“test.xls”。
2- 您的命令中“Staff”和“Number”之間有一個(gè)空格。如果列名是“StaffNumber”,則不應(yīng)有任何空格。我建議您先測試不帶 where 子句的命令。
- 2 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)