Как получить конкретные данные из таблицы Excel в текстовые поля - PullRequest
1 голос
/ 31 марта 2019

Я хочу получить конкретные данные из Excel Sheet в текстовые поля winforms, используя поисковый запрос.что-то вроде этого «Поиск * из [Sheet1], где 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());
           }

Это простая форма, в которой пользователь вводит штатный номер и получает информацию о человеке в соответствующих текстовых полях.Большинство результатов моего поиска дают мне решение показать данные в виде таблицы, но моя проблема немного другая, я знаю, что должен использовать средство чтения данных и выполнить его, но не знаю, почему эта проблема возникает.

Любое руководство будет очень полезным.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

немного подправил твой код ..

Улучшения

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

Мне кажется, в вашем коде есть несколько проблем:

1- Вы должны указать полный адрес файла Excel в вашем соединении, а не "test.xls".

2- В вашей команде есть пробел между «Персоналом» и «Числом».если имя столбца «StaffNumber», то не должно быть пробелов.Я рекомендую вам сначала проверить команду без предложения where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...