Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)

Winforms: Errors when running oledb connection (installable Isam, Commandtext was not set for the command object)

我的情况是,一旦我按下按钮,代码就会从 MS Access 中检索与 SerialNumber 相关的 EquipmentBrandEquipmentType。我可以通过 class oledb 检索序列号并使其自动完成。但是,现在我在检索设备品牌和类型时遇到问题。我尝试了两种代码,但都不同 errors.Here 是我的访问屏幕截图:MS Access screenshot

对于第一个错误,我已将平台更改为 x86。

第一个错误:无法在第 connection.Open();

行找到可安装的 Isam
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();
            }
        }
    }

对于第二个错误,我更改了 Data Source(另一种方法适用于遇到我的第一个问题的其他人),但出现了新错误:未为命令对象设置命令文本 在行 command.ExecuteReader

希望得到一些帮助谢谢!

因为OleDbConnection.CreateCommand() returns an instance of OleDbCommand, you need to set CommandText属性要在打开连接之前执行一个查询字符串,否则会抛出Command text was not set for command object 错误。下面是一个使用 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();
    }
}