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 关注
- 121 浏览
添加回答
举报