【问题标题】:How to initialize Access Number field in C-Sharp如何在 C-Sharp 中初始化访问号码字段
【发布时间】:2013-04-12 03:15:15
【问题描述】:

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

【问题讨论】:

  • 你真的用同一个文本框来输入姓名和身份证吗?
  • 大声抱歉,谢谢 :)
  • 我的代码现在可以工作了,但我还有一个问题,我没有将文本框字段转换为 INT,但它仍然接受自动编号字段的值。
  • 您没有用单引号将文本框括起来。引擎会像这样解释您的查询。 Update Table1 Set Name= 'Steve' where ID= 1 这是正确的语法。但是,我将发布一个示例,说明您应该如何编写查询

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


【解决方案1】:

此答案解决了您的问题
首先,用于名称的文本框与用于 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 语句

【讨论】:

  • 我的代码现在可以工作了,但我还有一个问题,我没有将文本框字段转换为 INT,但它仍然接受自动编号字段的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
相关资源
最近更新 更多