【发布时间】:2019-08-21 14:46:29
【问题描述】:
我想使用搜索查询将 Excel 工作表中的特定数据获取到 winforms TextBoxes 中。 像这样的东西 "从 [Sheet1] 中搜索 *,其中员工编号 =1234"
我尝试了这段代码,但它不起作用。 每次说连接未正确初始化时,我都会遇到异常。
try{
OleDbConnection con = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=Test.xls;Extended Properties=Excel 8.0;");
con.Open();
OleDbCommand oleDbCommand = new OleDbCommand("SELECT * FROM [Sheet1] where Staff Number=1234");
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader();
TxtDateOfBirth.Text = oleDbDataReader.GetString(1);
TxtName.Text=oleDbDataReader.GetString(2);
.
.
.
.
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
这是一个简单的表单,用户可以在其中输入员工编号并在相关文本框中获取人员的详细信息。 我的大多数搜索结果都为我提供了将数据显示到 datagridview 中的解决方案,但我的问题有点不同,我知道我必须使用数据阅读器并执行它,但不知道为什么会出现这个问题。
任何指南都会非常有帮助。
【问题讨论】:
-
您实际上并不需要 DataReader。您可以填充 DataTable 并使用列名称或索引将它们的值分配给控件的属性。 + 那张纸是没有标题的吗?查看连接字符串here(出现的第一个)。另外请注意,您可以使用
ACE.OLEDB.12.0而不是Jet.OLEDB.4.0打开旧的.xls文件(如果碰巧您也在阅读较新的.xlsx格式)。 -
另外,不要使用带空格的字段名称(例如,
Staff Number => [Staff Number])。 -
我还使用了没有 where 子句的字符串,它正在重新调整空结果。
-
您是否阅读了我发布的链接中的内容?您的连接字符串不正确。此外,您还没有发布 Excel 数据表的结构。如前所述:它是否有标题?另外,数据单元格的范围是什么?
-
对不起,我不明白标题是什么意思?我有两行,我使用 A1 到 E1 作为列名,使用 A2 到 E2 作为它们的值。我应该将列 nae 行调整为标题吗?
标签: c# excel winforms search textbox