日期:2014-05-16  浏览次数:20480 次

《项目经验》--简单三层使用DataTable向数据库表批量导入数据---向SqlServer一张表中导入数据

    向数据库的一张表中添加数据,可以采用单个添加,即一条数据、一条数据的添加;也可以采用批量导入,依次将好些条数据写入数据库的一张表中。文本借助实例《添加系列信息》讲解一种向数据库批量导入数据的方法。


1.界面设计

  观看一下添加系列信息部分的界面设计:

  

   本文主要介绍批量导入系列信息的实现,单个添加的实现不在此文讲解之列!

2.框架结构

  此项目的实现,我采用简单的三层,看一下项目框架

  

3.批量导入数据的实现

  下面逐层介绍每层实现:

       3.1 SqlHelper数据库助手类中添加向数据库表导入数据的方法(SqlHelper.cs)

#region 批量导入datatable
        /// <summary>
        /// 批量导入datatable
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="TabelName">数据表名</param>
        /// <param name="dtColum">列集合</param>
        public int InsertTable(DataTable dt, string TabelName, DataColumnCollection dtColum)
        {
            //打开数据库
            GetConn();
            try
            {
                //声明SqlBulkCopy ,using释放非托管资源
                using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
                {
                    //一次批量的插入的数据量
                    //sqlBC.BatchSize = 1000;
                    //超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
                    //sqlBC.BulkCopyTimeout = 60;

                    //設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。 
                    //sqlBC.NotifyAfter = 10000;
                    // sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);

                    //设置要批量写入的表
                    sqlBC.DestinationTableName = TabelName;

                    //自定义的datatable和数据库的字段进行对应
                    
                    for (int i = 0; i < dtColum.Count; i++)
                    {
                        sqlBC.ColumnMappings.Add(dtColum[i].ColumnName.ToString(), dtColum[i].ColumnName.ToString());
                    }
                    //批量写入
                    sqlBC.WriteToServer(dt);
                }
                //导入成功,返回1
                return 1;
            }
            catch
            {
                //导入失败返回-1
                return -1;

            }
            finally
            {
                //关闭数据库
                conn.Close();
            }
        }
        #endregion


  3.2.DAL层批量导入数据的代码(DaoSeries.cs)

 #region 批量导入系列信息
        /// <summary>
        /// 批量导入系列信息
        /// </summary>
        /// <param name="dt">DataTable数据表-dt;</param>
        /// <param name="dtColum">DataColumnCollection 列集合-dtColum</param>
        /// <returns>整数:大于0代表导入成功;否则导入失败</returns>