首页 > 解决方案 > 多插入更新解决方案的最佳解决方案

问题描述

作为初学者,努力理解 C# 和 Npgsql。以下代码示例:

   // Insert some data
    using (var cmd = new NpgsqlCommand())
    {            cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO data (some_field) VALUES (@p)";
        cmd.Parameters.AddWithValue("p", "Hello world");
        cmd.ExecuteNonQuery();
    }

到目前为止,这样的多个插入和更新语句的语法很清楚:

cmd.CommandText = "INSERT INTO data (some_field) VALUES (@p);INSERT INTO data1...;INSERT into data2... and so on";

但是对于应该处理其中的一个语句的循环来说,正确的解决方案是什么。

这不起作用:

// Insert some data
    using (var cmd = new NpgsqlCommand())
    {
        foreach(s in SomeStringCollectionOrWhatever)
        {
           cmd.Connection = conn;
           cmd.CommandText = "INSERT INTO data (some_field) VALUES (@p)";
           cmd.Parameters.AddWithValue("p", s);
           cmd.ExecuteNonQuery();
        }
    }

似乎这些值将被“连接”或记住。我看不到任何“清除”现有 cmd 对象的可能性。

我的第二个解决方案是将整个“使用”块包装到循环中。但是每个循环都会创建一个新对象。这对我来说似乎很丑陋。

那么我的问题的最佳解决方案是什么?

标签: npgsql

解决方案


要有效地插入大量行,请查看 Npgsql 的批量复制功能- 该 API 更适合(并且更有效)插入大量行,而不是像您尝试做的那样将 INSERT 语句连接到批处理中。


推荐阅读