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

时间:2019-03-31 05:21:08

标签: c# excel winforms search textbox

我想使用搜索查询将Excel工作表中的特定数据转换为winforms文本框。 像这样的东西 “在[Sheet1]中搜索*,其中Staff Number = 1234”

我尝试了这段代码,但是没有用。 每当出现提示“连接未正确初始化”时,我都会遇到异常。

int total[10];
for(i=0;i<n;i++){
    total[i]=num[i]+number[i];
             }

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

任何指南都将非常有帮助。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

稍微调整了代码。

改进

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

问题

添加了一些变量以使其更整洁,并为您的xls db文件提供 完整路径

$之后添加了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());
}