如何在C-Sharp中初始化Access Number字段

时间:2013-04-18 20:35:45

标签: c# ms-access select sql-update

我知道如何在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();

1 个答案:

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