【问题标题】:What is the correct way to form a parameterized SQL statement in C#在C#中形成参数化SQL语句的正确方法是什么
【发布时间】:2013-09-20 00:55:52
【问题描述】:

目标:使用 C# 和 SQL2008 正确设置参数化 SQL 插入语句

问题: 以下语句用于 for 循环,因此必须清除值。运行此代码时,它指出在 250 附近存在语法错误。代码如下

for (int i = 0; i < Rows.Count; i++)
{
    cmd.Parameters.Clear();

    struct Row = (struct)Rows[i];

    sql = "@RowName varchar(250) = null " +
    "INSERT INTO " +
        "database.dbo.table" +
             "(database.dbo.tabe.RowName) " +
    "VALUES " +
        "(@RowName) ";

 cmd.CommandText = sql;
 cmd.Parameters.AddWithValue("@RowValue ", Row.RowName);

}

提前感谢您的更正、cmets 和建议。

【问题讨论】:

    标签: c# sql parameterized-query


    【解决方案1】:

    您不必在 SQL 代码中重新声明变量。这应该有效:

    sql =
        "INSERT INTO " +
            "database.dbo.table" +
                "(database.dbo.tabe.RowName) " +
        "VALUES " +
            "(@RowName) ";
    
    cmd.CommandText = sql;
    cmd.Parameters.AddWithValue("@RowValue ", Row.RowName);
    

    【讨论】:

      【解决方案2】:

      struct 是关键字,不能用作类型名称。您不需要先声明参数(在这种情况下,所有必要的元数据都从 AddWithValue 推断出来)并且 SQL 查询中的参数名称必须与您在 AddWithValue 中输入的名称相匹配。

      for (int i = 0; i < Rows.Count; i++)
      {
          cmd.Parameters.Clear();
      
          var Row = (MyStruct)Rows[i];
      
          sql = "INSERT INTO " +
              "database.dbo.table " +
                   "(database.dbo.tabe.RowName) " +
          "VALUES " +
              "(@RowName)";
      
          cmd.CommandText = sql;
          cmd.Parameters.AddWithValue("@RowName", Row.RowName);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-06
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多