如何从Excel工作表中获取特定数据到文本框中

我想使用搜索查询将特定数据从 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());

           }

这是一个简单的表单,用户将在其中输入员工编号并在相关文本框中获取此人的详细信息。大多数“我的搜索”结果为我提供了将数据显示到数据网格视图中的解决方案,但我的问题有点不同,我知道我必须使用数据读取器并执行它,但不知道为什么会出现这个问题。


一只斗牛犬
浏览 122回答 2
2回答

海绵宝宝撒

稍微调整一下你的代码..改进更改了您的连接字符串,添加HDR=Yes;了指示第一行包含列名并且IMEX=1;告诉驱动程序始终将“混合”(数字、日期、字符串等)数据列作为文本读取的内容。在使用员工数据库时,这些通常很有帮助。问题添加了变量以使其更清晰和完整的 xls 数据库文件路径。按照上面其他帮助用户的评论中的建议,添加了一个$afterSheet1并用 [] 包装。[Staff Number]添加oleDbDataReader.Read()以通读结果,因为上面的代码中也缺少它。下面的示例代码对我有用。try&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; var xlsDbPath= "C:\\Temp\\Test.xls"; //<-- Full name of path&nbsp; &nbsp; var connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsDbPath+ ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";&nbsp; &nbsp; var query = "SELECT * FROM [Sheet1$] WHERE [Staff Number] = 1234";&nbsp; //<-- Add $ after Sheet1 and fix 'Staff Number'?&nbsp; &nbsp; using (var con = new OleDbConnection(connStr))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; con.Open();&nbsp; &nbsp; &nbsp; &nbsp; using (var oleDbCommand = new OleDbCommand(query, con))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; using (var oleDbDataReader = oleDbCommand.ExecuteReader())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (oleDbDataReader.Read())&nbsp; //Read through results&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TxtDateOfBirth.Text = oleDbDataReader.GetString(1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TxtName.Text = oleDbDataReader.GetString(2);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//...&nbsp; //Remember if value is not string you will get error&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//...&nbsp; //so if not string use .GetValue(1).ToString();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}catch (Exception ex){&nbsp; &nbsp; MessageBox.Show(ex.ToString());}

拉风的咖菲猫

在我看来,您的代码中存在一些问题:1- 您应该将 Excel 文件的完整地址放在您的连接中,而不是“test.xls”。2- 您的命令中“Staff”和“Number”之间有一个空格。如果列名是“StaffNumber”,则不应有任何空格。我建议您先测试不带 where 子句的命令。
打开App,查看更多内容
随时随地看视频慕课网APP