为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
一只斗牛犬 2022-11-21 16:02:45
我想使用搜索查询将特定数据从 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());           }这是一个简单的表单,用户将在其中输入员工编号并在相关文本框中获取此人的详细信息。大多数“我的搜索”结果为我提供了将数据显示到数据网格视图中的解决方案,但我的问题有点不同,我知道我必须使用数据读取器并执行它,但不知道为什么会出现这个问题。
查看完整描述

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());

}


查看完整回答
反对 回复 2022-11-21
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

在我看来,您的代码中存在一些问题:

1- 您应该将 Excel 文件的完整地址放在您的连接中,而不是“test.xls”。

2- 您的命令中“Staff”和“Number”之间有一个空格。如果列名是“StaffNumber”,则不应有任何空格。我建议您先测试不带 where 子句的命令。


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信