内部循环中的ExecuteNonQuery

Dan*_*Dan 7 c# sqlcommand parameterized-query

我正在尝试在C#中的循环中插入数据库记录.

它在我硬编码这样的值时起作用:

    string query3 = "INSERT INTO furniture (room_id,member_id) VALUES (222,333);";
    SqlCommand cmd3 = new SqlCommand(query3, sqlConnection3);
    sqlConnection3.Open();

    for (int i = 0; i < arrItemsPlanner.Length; i++)
    {
        try
            {
                cmd3.ExecuteNonQuery();
            }
            catch
            {
                return "Error: Item could not be saved";
            }
            finally
            {
                //Fail
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用参数化查询时,它不起作用 - 即使我将值硬编码到参数化查询中,如下所示:

    string query3 = "INSERT INTO furniture (room_id,member_id) VALUES (@room_id,333);";
    SqlCommand cmd3 = new SqlCommand(query3, sqlConnection3);
    sqlConnection3.Open();

    for (int i = 0; i < arrItemsPlanner.Length; i++)
    {
        try
            {
                cmd3.Parameters.Add("@room_id", System.Data.SqlDbType.Int);
                cmd3.Parameters["@room_id"].Value = 222;
                cmd3.ExecuteNonQuery();
            }
            catch
            {
                return "Error: Item could not be saved";
            }
            finally
            {
                //Fail
            }
        }
Run Code Online (Sandbox Code Playgroud)

有人能看到我在哪里错了吗?

非常感谢!

Vai*_*ain 6

我告诉你一个简单的解决方案,并确保它有效.如果在循环中使用参数您需要在执行查询后清除参数.所以你可以使用它

cmd3.executeNonQuery();
cmd3.parameters.clear();
Run Code Online (Sandbox Code Playgroud)


Tim*_*ora 5

好像您要一遍又一遍地添加到命令的参数集中。每次迭代都将其清除。

我还建议抛出实际的异常,以便您可以了解问题所在。