Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)
Posted
技术标签:
【中文标题】Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)【英文标题】:Winforms: Errors when running oledb connection (installable Isam, Commandtext was not set for the command object) 【发布时间】:2019-01-22 03:58:44 【问题描述】:我的情况是,一旦我按下按钮,代码将从 MS Access 中检索 EquipmentBrand
和 EquipmentType
与 SerialNumber
相关。我可以通过oledb
类检索序列号并使其自动完成。但是,现在我在检索设备品牌和类型时遇到问题。我尝试了两个代码,但都有不同的错误。这是我的访问截图: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 text was not set for command object at line @ 987654329@
希望能得到一些帮助谢谢!
【问题讨论】:
你不应该使用 textbox1.Text 因为这将允许 SQL 注入攻击。 【参考方案1】:由于OleDbConnection.CreateCommand()
返回OleDbCommand
的实例,你需要在打开连接之前将CommandText
属性设置为你想要执行的查询字符串,否则会抛出Command text was not set for command对象 错误。下面是一个使用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();
【讨论】:
OLEDB 参数是位置未命名的。所以这将起作用,但如果您有多个参数,则必须按照它们在 SQL 中出现的顺序添加它们。为了清楚起见,您可以说 command.Parameters.AddWithValue("?", (textBox1.Text)); 感谢您的回复。我已经添加了命令文本并且它起作用了。我会注意 SQL 注入的风险并进行相应的改进。我可以知道除了textBox1.Text
的用法还有哪些选项?以上是关于Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)的主要内容,如果未能解决你的问题,请参考以下文章
Jet.OLEDB 在连接时“找不到可安装的 ISAM”。打开
Winforms (C#) 中的 OleDb 参数查询:没有错误但没有更新行