单个插入与多个插入

时间:2013-12-24 12:50:17

标签: c# sql sql-server-2008 bulkinsert

我正在迭代一个(二进制)文件并在表中插入一些值。 收到值后,我在数据库中逐行插入。

我的部分代码(示例值):

string sColumn1 = Getcolumn1Value();
string sColumn2 = Getcolumn2Value();

string sqlIns = "INSERT INTO table (column1, column2) " +
                      "VALUES (@column_1, @column_2)";

SqlCommand cmdInsPacket = new SqlCommand(sqlIns, connection);

cmdInsPacket.Parameters.AddWithValue("@column_1", sColumn1);
cmdInsPacket.Parameters.AddWithValue("@column_2", sColumn2);

cmdInsPacket.ExecuteNonQuery();
cmdInsPacket.Parameters.Clear();

因为有数百万条记录,我想知道是否更愿意插入一组,例如500而不是一个一个。

有任何好的建议来解决这个问题(并且我的建议(组插入)很有用)

(MS SQL Server 2008 R2和C#)

2 个答案:

答案 0 :(得分:0)

您可以使用SqlBulkCopy插入多条记录。您可以将记录放在datatable中,并在单个调用中将它们保存到db。

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))     
{
    bulkCopy.DestinationTableName =  "dbo.BulkCopyDemoMatchingColumns";
    try
    {
        bulkCopy.WriteToServer(newProducts);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

答案 1 :(得分:0)

如果您拥有DataTable格式的数据,请使用此简单功能。

function static void InsertDataIntoSQLServerUsingSQLBulkCopy(DataTable bulkData)
{
    using(SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial     Catalog=yourDB;Integrated Security=SSPI;"))
    {
         dbConnection.Open();
         using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
         {
            s.DestinationTableName = "Your table name";
            foreach (var column in bulkData.Columns)
            s.ColumnMappings.Add(column.ToString(), column.ToString());
            s.WriteToServer(bulkData);
         }
    }
}