使用 SqlBulkCopy 批量插入数据

     /// <summary>
        /// 使用SqlBulkCopy将DataTable中的数据批量插入数据库中
        /// </summary>
        /// <param name="strTableName">数据库中对应的表名</param>
        /// <param name="dtData">数据集</param>
        /// <param name="dicFields">中英文对应字典</param>
        /// <returns></returns>
        public string SqlBulkCopyInsert(string connStr, string strTableName, DataTable dtData, Dictionary<string, string> dicFields = null)
        {
            try
            {
                using (SqlBulkCopy sqlCopy = new SqlBulkCopy(connStr))//引用SqlBulkCopy
                {
                    sqlCopy.BulkCopyTimeout = 6000;//6s没有操作完成失败

                    sqlCopy.DestinationTableName = strTableName;//数据库中对应的表名

                    foreach (DataColumn item in dtData.Columns)
                    {
                        try
                        {
                            if (dicFields != null)
                            {
                                //映射列头和字段名称
                                item.ColumnName = dicFields[item.ColumnName.Replace(" ", "")];
                            }
                            sqlCopy.ColumnMappings.Add(item.ColumnName, item.ColumnName);
                        }
                        catch (Exception ex)
                        {
                            NLogHelper.Error("数据字典和字段{" + item.ColumnName + "}不对应!", ex);
                        }
                    }
                    sqlCopy.WriteToServer(dtData);//数据导入数据库

                    sqlCopy.Close();//关闭连接
                }
                return null;
            }
            catch (Exception ex)
            {
                NLogHelper.Error("批量插入数据出错!", ex);
                return ex.Message;
            }
        }

  

 //映射表头和数据库表字段的关系
        public static Dictionary<string, string> dicFields = new Dictionary<string, string>() {
            {"型号","Model"},{"品牌","Brand"},{"批号","MakeYear"}
        };

 

posted @ 2017-09-06 19:07  微笑代表淡定.Net  阅读(290)  评论(0编辑  收藏  举报