немного подправил твой код ..
Улучшения
Изменена ваша строка подключения, добавлено 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());
}