【问题标题】:Insert adding items to wrong column插入添加项目到错误的列
【发布时间】:2013-05-16 16:29:23
【问题描述】:

下面是一个插入语句,它将第一个值 (acctNum) 输入到第二列 (itemCode) 中,反之亦然:

string addUpcCode = "INSERT INTO compare1 (acct, itemcode)"
                    + "VALUES ('"+acctNum+"', '"+itemCode+"')";

这不是我想要的工作方式,因为我希望第一个值放在第一列,第二个放在第二列。我该怎么办?

旁注:在我了解有关参数化的更多信息之前,这是一个粗略的草案。在我学习并实现它之前,我不会发布此代码。

【问题讨论】:

  • 这个 SQL 保持序列不变 - 很可能你只是把变量弄混了。
  • 我把它们混在了类 args 中。谢谢!没想到看那里。
  • 顺便说一句,如果您以答案的形式发表评论,考虑到您是第一个回复的,我会标记它。

标签: c# asp.net sql webforms


【解决方案1】:

给定的 SQL 片段会做你想做的事 - 尤其是列的序列将被保留。

我怀疑您可能已经切换了变量,导致相同的现象,但出于其他原因。

【讨论】:

    【解决方案2】:

    您应该使用 SQL 参数,这也可以避免产生 SQL 注入问题:

    using (SqlCommand command = new SqlCommand("INSERT INTO compare1 (acct, itemcode) VALUES (@AcctNum, @ItemCode)", connection))
    {
        // Add new SqlParameter to the command.
         command.Parameters.Add(new SqlParameter("AcctNum", acctNum));
         command.Parameters.Add(new SqlParameter("ItemCode", itemCode));
    

    【讨论】:

    • 我知道,并在帖子底部清楚地表明了我的意识。我的一个朋友一直在关注我。感谢您的提醒和关注。
    • -1 ...虽然这是真的,但它与 OQ 的相关性绝对为零
    【解决方案3】:

    当您使用 C# 时,string.format 函数非常适合这种事情

        string.format("INSERT INTO compare1(acct, itemCode) Values('{0}','{1}'", acctNum, itemCode);
    

        string.format("INSERT INTO compare1 SELECT '{0}','{1}' ", acctNum, itemCode);
    

    但是,是的,您可能将它们混合在其他地方,订单将被保留。哦,如果 acctNum 是一个整数,您将不需要在 {0}

    周围加上引号

    编辑: 哦,是的,接下来一定要查看参数

    【讨论】:

      【解决方案4】:

      使用参数化查询来防止SQL注入,你可以解决这个问题

       command.Parameters.Add("AcctNum", acctNum);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 2014-08-23
        • 1970-01-01
        相关资源
        最近更新 更多