学习笔记之向数据库批量插入数据
在我们平时的ASP.NET开发过程中,经常要向数据库插入数据,有时可能要进行很多次类似的操作,比如向数据库中的同一个表同时插入若干数据,即批量插入数据。
为了更好的用户体验,提高程序执行效率,我们可以构建一张与数据库中相同的DataTable表,利用SqlBulkCopy写入数据库。
为了代码的重用,将写入数据库代码做成一个方法:
/// <summary> /// 执行SqlBulkCopy将DataTable写入到SQL对应是表中(大量数据推荐使用) /// </summary> /// <param name="sqlDbTableName">数据库表名</param> /// <param name="sourceDataTable">需要进行写入的DataTable</param> /// <returns></returns> public static int DataTableWriteToSqlDbTable(string sqlDbTableName, DataTable sourceDataTable) { SqlConnection connection = new SqlConnection(connectionString); using (SqlBulkCopy bcp = new SqlBulkCopy(connection)) { connection.Open(); try { bcp.BulkCopyTimeout = 1000000; bcp.DestinationTableName = sqlDbTableName; bcp.WriteToServer(sourceDataTable); return sourceDataTable.Rows.Count; } catch { return 0; } } }
2、在需要执行批量插入的地方构建一张DataTable表并调用DataTableWriteToSqlDbTable(string sqlDbTableName, DataTable sourceDataTable)方法
DataTable dt = new DataTable(); dt.Columns.Add("newsId", typeof(String)); dt.Columns.Add("newsName", typeof(String)); dt.Columns.Add("newsTime", typeof(String)); for (int i = 1; i <= 100000; i++) { dt.Rows.Add(new object[] { i.ToString(), "今天天气真好", DateTime.Now.ToString(), }); } DateTime t1 = DateTime.Now; int result = DataTableWriteToSqlDbTable("News", dt); DateTime t2 = DateTime.Now; Console.WriteLine((t2-t1).TotalSeconds); Console.WriteLine("共插入"+result+"条数据"); Console.ReadKey();
结果: