首页 > 解决方案 > Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)

问题描述

我的情况是,一旦我按下按钮,代码将从 MS Access 中检索EquipmentBrand与. 我能够通过课程检索序列号并使其自动完成。但是,现在我在检索设备品牌和类型时遇到问题。我尝试了两个代码,但都有不同的错误。这是我的访问屏幕截图:MS Access screenshotEquipmentTypeSerialNumberoledb

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

第一个错误:在线上找不到可安装的 Isamconnection.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();
            }
        }
    }

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

希望能得到一些帮助谢谢!

标签: c#winformsms-accessoledb

解决方案


由于OleDbConnection.CreateCommand()返回的是 的实例OleDbCommand,因此需要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();
    }
}

推荐阅读