0

我知道如何在 Access 查询中为字符串字段使用文本框值,但我无法理解如何将它用于 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();
4

1 回答 1

1

这个答案纠正了你的问题
首先,名称的文本框与用于 ID 的文本框不同。
其次,不要连接字符串来构建 sql 命令。它非常容易出错并且对一个众所周知的 sql 漏洞开放,称为Sql Injection

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 语句

于 2013-04-18T21:10:59.380 回答