【问题标题】:Data type mismatch in criteria expression Access 2013条件表达式 Access 2013 中的数据类型不匹配
【发布时间】:2014-12-07 03:12:29
【问题描述】:
OleDbCommand computerStatus = new OleDbCommand("update Computer SET Status= 'Occupied' where PcNumber='" + cboComputerNo.Text + "'", con);
computerStatus.ExecuteNonQuery();

这是我的代码。 pcNumber 是自动编号我收到一个错误,它希望我将数据类型更改为字符串,但我需要它是自动编号。

【问题讨论】:

  • 使用参数避免sql注入。使用 int.TryParse 将文本转换为数字。
  • 已经使用过 TryParse 和 int.parse 在第一次使用参数时对我不起作用。

标签: c# ms-access insert-update


【解决方案1】:

AutoNumber 是自动编号。既然是数值,就不用单引号了。

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。

还可以使用using statement 来处理您的OleDbConnection 和OleDbCommand。

using(OleDbConnection con = new OleDbConnection(conString))
using(OleDbCommand computerStatus = con.CreateCommand())
{
    computerStatus.CommandText = "update Computer SET Status= ? where PcNumber = ?";
    computerStatus.Parameters.AddWithValue("@status", "Occupied");
    computerStatus.Parameters.AddWithValue("@number", cboComputerNo.Text);
    computerStatus.ExecuteNonQuery();
}

正如 LarsTech 指出的那样,您可能想使用 Int.TryParse method 检查您的 cboComputerNo.Text 字符串是否为有效整数。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多