如何从 excel sheet 获取特定数据到文本框

How to get specific data from excel sheet into textboxes

我想使用搜索查询从 Excel Sheet 获取特定数据到 winforms 文本框。 像这样的 "Search * from [Sheet1] where Staff Number=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());
           }

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

任何指南都会很有帮助。

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

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

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

稍微调整了你的代码..

改进

更改了连接字符串,添加了 HDR=Yes; 表示第一行包含列名,还添加了 IMEX=1; 告诉驱动程序始终读取“混合”(数字、日期、字符串等)数据列作为文本。这些通常在使用员工数据库时很有帮助。

问题

添加了变量以使其更清晰,并且 完整路径 到您的 xls 数据库文件。

Sheet1 之后添加了一个 $ 并且还按照上面其他帮助用户的评论中的建议用 [] 包裹了 [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());
}