Winforms: Ошибки при запуске соединения oledb (устанавливается Isam, Commandtext не был установлен для объекта команды) - PullRequest
0 голосов
/ 22 января 2019

Моя ситуация, когда я нажимаю кнопку, код извлекает EquipmentBrand и EquipmentType из MS Access относительно SerialNumber.Я могу получить серийный номер через класс oledb и сделать его автоматически завершенным.Однако сейчас у меня проблема с поиском оборудования и марки.Я пробовал два кода, но оба имеют разные ошибки. Вот мой скриншот доступа: Скриншот MS Access

Для первой ошибки я изменил свою платформу на x86.

Первая ошибка: не удалось найти устанавливаемый Isam в строке connection.Open();

private void Form1_Load(object sender, EventArgs e)
    {
        oledb da = new oledb();
        textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
        textBox1.AutoCompleteCustomSource = da.Loadserialnum();
    }

private void button2_Click(object sender, EventArgs e)
    {
        var connection = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\\Users\\equipment.accdb");
        var command = connection.CreateCommand();
        {
            command.Parameters.AddWithValue("SerialNumber", (textBox1.Text));
            connection.Open(); //error here
            var reader = command.ExecuteReader();
            while (reader.Read())
            {
                textBox2.Text = reader["EquipmentBrand"].ToString();
                textBox3.Text = reader["EquipmentType"].ToString();
            }
        }
    }

Для второй ошибки Ive изменил Data Source (другой способ, который работает для другиху меня была 1-я проблема), но возникает новая ошибка: Не задан текст команды для объекта команды в строке command.ExecuteReader

Надеюсь получить помощь, спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Поскольку OleDbConnection.CreateCommand() возвращает экземпляр OleDbCommand, вам необходимо установить свойство CommandText для строки запроса, которую вы хотите выполнить перед открытием соединения, в противном случае выбросит Текст команды не был установлен для объекта команды Ошибка. Ниже приведен пример использования свойства CommandText:

private void button2_Click(object sender, EventArgs e)
{
    var connection = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = C:\\Users\\equipment.accdb");
    var command = connection.CreateCommand();

    // query string example
    command.CommandText = "SELECT * FROM TableName WHERE SerialNumber = ?"; 

    command.Parameters.AddWithValue("SerialNumber", (textBox1.Text));
    connection.Open(); // open the connection
    var reader = command.ExecuteReader();
    while (reader.Read())
    {
        textBox2.Text = reader["EquipmentBrand"].ToString();
        textBox3.Text = reader["EquipmentType"].ToString();
    }
}
...