我想使用搜索查询将Excel工作表中的特定数据转换为winforms文本框。 像这样的东西 “在[Sheet1]中搜索*,其中Staff Number = 1234”
我尝试了这段代码,但是没有用。 每当出现提示“连接未正确初始化”时,我都会遇到异常。
int total[10];
for(i=0;i<n;i++){
total[i]=num[i]+number[i];
}
这是一种简单的表单,用户可以在相关的文本框中输入人员编号并获取人员的详细信息。 大多数“我的搜索”结果为我提供了将数据显示到datagridview中的解决方案,但是我的问题有点不同,我知道我必须使用数据读取器并执行它,但是不知道为什么会出现此问题。
任何指南都将非常有帮助。
答案 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());
}