我知道如何在Access查询中使用Text Box值来获取字符串字段,但我无法理解如何将它用于int字段。
我正在编写以下查询并收到错误消息。
错误消息:没有给出一个或多个必需参数的值。
OleDbCommand cmd = new OleDbCommand("Update Table1 Set Name= '" + textBox2.Text + "' where ID= " +textBox2.Text , conn);
conn.Open();
cmd.ExecuteNonQuery();
我也尝试将textBox2转换为int,但它也给了我一条错误信息。
输入字符串的格式不正确。
int Id= Convert.ToInt16(textBox2.Text);
OleDbCommand cmd = new OleDbCommand("Update Table1 Set Name= '" + textBox2.Text + "' where ID= " + Id , conn);
conn.Open();
cmd.ExecuteNonQuery();
答案 0 :(得分:1)
这个答案纠正了你的问题 首先,NameBox for Text与用于ID的文本框不同 其次,不要连接字符串来构建sql命令。它非常容易出错,并且对一个名为Sql Injection
的知名sql漏洞开放string queryText = Update Table1 Set Name= ? where ID= ?";
OleDbCommand cmd = new OleDbCommand(queryText, conn);
cmd.Parameters.AddWithValue("@p1", TextBox1.Text);
cmd.Parameters.AddWithValue("@p2", Convert.ToInt32(TextBox2.Text));
conn.Open();
cmd.ExecuteNonQuery();
这里我删除了字符串连接并插入了两个参数占位符(?), 然后我在OleDbCommand中添加了两个参数及其值 执行查询时,OleDb代码将用实际值替换占位符,检查无效字符和无效的sql语句