学习笔记之向数据库批量插入数据

在我们平时的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();

结果:

 

posted @ 2012-10-12 21:52  猿来似梦  阅读(178)  评论(0)    收藏  举报