1

目的: C# と SQL2008 を使用して、パラメーター化された SQL Insert ステートメントを正しくセットアップする

問題:次のステートメントは 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 に答える