我如何/什么是批量数据库插入的最佳方式?
在C#中,我正在迭代一个集合并为集合中的每个项调用插入存储过程.
如何在一次数据库调用中发送所有数据?
例如,我说我有一个List
包含10个项目的人员列表().我目前正在调用InsertPerson存储过程10次.我想将此减少到1个电话.
我正在使用MS SQL Server 2005.
CsharperGuyInLondon,这是SqlBulkCopy代码的一个简单示例:
using System.Data.SqlClient; DataTable table = new DataTable("States"); // construct DataTable table.Columns.Add(new DataColumn("id_state", typeof(int))); table.Columns.Add(new DataColumn("state_name", typeof(string))); // note: if "id_state" is defined as an identity column in your DB, // row values for that column will be ignored during the bulk copy table.Rows.Add("1", "Atlanta"); table.Rows.Add("2", "Chicago"); table.Rows.Add("3", "Springfield"); using(SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString)) { bulkCopy.BulkCopyTimeout = 600; // in seconds bulkCopy.DestinationTableName = "state"; bulkCopy.WriteToServer(table); }
好吧,10个项目不是我称之为批量,但对于较大的集合,SqlBulkCopy
是你的朋友.你需要做的就是给它一个DataTable
或一个IDataReader
(我喜欢的选项,'我喜欢流API).我在这里做了类似的事情(你可以忽略xml方面 - 只是SimpleDataReader的子类).
.NET SqlBulkCopy类运行良好.