【问题标题】:Insert SQL Values Into a Database Table将 SQL 值插入数据库表
【发布时间】:2013-07-15 22:00:30
【问题描述】:

我收到以下错误

项目编号附近的语法不正确

但我没有看到任何错误,插入的值来自一个数据集,该数据集包含另一个 sql 查询的变量中的字段名称,该查询正在循环通过,然后像这样插入到另一个表中......

string strOrderDetails = 
    "INSERT INTO Orders (Order Number, Item Number, Description, Price) " +
    "VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '"
             + intItemNo + "', '"
             + strDesc.Replace("'", "''").ToString() + "', '"
             + decPrice + "')";

在执行上述代码时,代码会发生故障并指出单词项目编号附近有错误?

intItemNo 是一个整数,我需要对它做些什么吗?

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 您可以尝试使用带有空格的方括号列,例如 ([Order Number], [Item Number],....)
  • 请按以下史蒂夫的回答做。参数化查询总是一个更好的主意。他还确保使用 using 关键字正确处理您的 SqlCommandSqlConnection 对象。

标签: c# sql variables insert dataset


【解决方案1】:

当一列包含空格时,您需要将其括在方括号或所选数据库的其他分隔符中

但是话说回来,请不要使用字符串连接来构建sql命令,而始终是参数化查询。

string strOrderDetails = "INSERT INTO Orders ([Order Number], [Item Number]," + 
                         "Description, Price) VALUES (@ordNum, @temNo, @desc, @price";
using(SqlConnection cn = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand(strOrderDetails, cn))
{
    cn.Open();
    cmd.Parameters.AddWithValue("@ordNum",strOrderNo);
    cmd.Parameters.AddWithValue("@itemNo",intItemNo);
    cmd.Parameters.AddWithValue("@desc",strDesc);
    cmd.Parameters.AddWithValue("@price", decPrice);
    cmd.ExecuteNonQuery();
}

如您所见,使用参数无需编写代码来处理输入值中的引号,同时也消除了Sql Injection 攻击的可能性

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多