1

目标:使用 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);

}

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

4

2 回答 2

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);
}
于 2013-09-19T16:52:59.327 回答
2

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

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

cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@RowValue ", Row.RowName);
于 2013-09-19T16:50:43.043 回答