首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteNonQuery内部循环

ExecuteNonQuery内部循环
EN

Stack Overflow用户
提问于 2012-01-06 01:41:49
回答 7查看 10.7K关注 0票数 9

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

当我像这样硬编码这些值时,它就会起作用:

代码语言:javascript
复制
    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
            }
        }

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

代码语言:javascript
复制
    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
            }
        }

有没有人能看出来我错在哪里了?

非常感谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-06 01:42:59

看起来您在一次又一次地向命令的参数集合中添加内容。在每次迭代时清除它。

我还建议抛出实际的异常,这样您就可以看到问题是什么。

票数 6
EN

Stack Overflow用户

发布于 2014-01-01 17:56:17

测试&简单的解决方案。如果您使用循环中的参数,则需要在执行查询后清除这些参数。所以你可以使用它

代码语言:javascript
复制
cmd3.executeNonQuery();
cmd3.Parameters.Clear();
票数 7
EN

Stack Overflow用户

发布于 2012-01-06 01:46:14

这是未经测试的,但应该可以作为替代方案。只需添加它一次,然后不断更新它的值。

代码语言:javascript
复制
....
cmd3.Parameters.Add("@room_id", System.Data.SqlDbType.Int);

for (int i = 0; i < arrItemsPlanner.Length; i++)
{
    try
        {
            cmd3.Parameters["@room_id"].Value = 222;
            cmd3.ExecuteNonQuery();
        }
....

顺便说一句,您的SqlCommand应该和您的SqlConnection一样位于using块中。完整的代码没有显示出来,所以我不知道你的连接是不是真的是这样的。

代码语言:javascript
复制
using (var conn = new SqlConnection(...))
using (var cmd = new SqlCommand(..., conn))
{

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8747066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档