我正在迭代一个(二进制)文件并在表中插入一些值。 收到值后,我在数据库中逐行插入。
我的部分代码(示例值):
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#)
答案 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);
}
}
}