Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)
Winforms: Errors when running oledb connection (installable Isam, Commandtext was not set for the command object)
我的情况是,一旦我按下按钮,代码就会从 MS Access 中检索与 SerialNumber
相关的 EquipmentBrand
和 EquipmentType
。我可以通过 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();
}
}
我的情况是,一旦我按下按钮,代码就会从 MS Access 中检索与 SerialNumber
相关的 EquipmentBrand
和 EquipmentType
。我可以通过 class oledb
检索序列号并使其自动完成。但是,现在我在检索设备品牌和类型时遇到问题。我尝试了两种代码,但都不同 errors.Here 是我的访问屏幕截图:MS Access screenshot
对于第一个错误,我已将平台更改为 x86。
第一个错误:无法在第 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();
}
}
}
对于第二个错误,我更改了 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();
}
}