SQL server 一次性把DataBable中的数据导入到数据库中

本人新人,做项目时需要导一个Excel数据到数据库中,由表中数据量比效大,8000到30000条数据,以前是利用DataTable循环成一个List集合,再用方法循环将List集合一条条将记录插入到数据中,数据量大很麻烦,百度很久发了别人的方法,记录一下。

    /// <summary>
    /// 一次性把DataBable中的数据导入到数据库中
    /// </summary>
    /// <param name="source">传入的DataTable</param>
    /// <param name="tableName">数据库中的表名</param>
    /// <returns>返回bool类型提示是否成功</returns>
    public bool AddDataTableToDB(DataTable source, string tableName)
    {
        SqlTransaction tran = null;//声明一个事务对象 

        //连接字符串取的是webConfig中的
        string connstr = ConfigurationManager.ConnectionStrings["ConnectionString_Cloud"].ToString();
        try
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                conn.Open();//打开链接 
              
                using (tran = conn.BeginTransaction())
                {
                    using (SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran))
                    {
                        copy.DestinationTableName = tableName;           //指定服务器上目标表的名称

                        #region 进行字段映射   
                        if (tableName == "DataInfo")  
                        {
                            copy.ColumnMappings.Add("域", "Field");    //映射时前面为DataTable中的列名,后面为数据库的列名。
                            copy.ColumnMappings.Add("零件号", "Part_NO");
                            copy.ColumnMappings.Add("零件描述", "Description");
                            copy.ColumnMappings.Add("供应商号", "Supplier_NO");
                            copy.ColumnMappings.Add("供应商名称", "SupplierName");
                            copy.ColumnMappings.Add("交易状态", "State");
                            copy.ColumnMappings.Add("标识", "Identification");
                            copy.ColumnMappings.Add("合并", "Merge_Y");
                            copy.ColumnMappings.Add("是否代理", "Agent");
                            copy.ColumnMappings.Add("品牌", "Brand");
                            copy.ColumnMappings.Add("供应商零件号", "Supplier_Part_NO");
                            copy.ColumnMappings.Add("责任采购", "Liable");
                            copy.ColumnMappings.Add("测试报告", "TestReport");
                            copy.ColumnMappings.Add("有效期", "VLD");
                            copy.ColumnMappings.Add("审核说明", "Review");
                            copy.ColumnMappings.Add("结果", "Result");
                        }
                        else if (tableName == "")
                        {

                        }
                        #endregion

                        copy.WriteToServer(source);                      //执行把DataTable中的数据写入DB 
                        //Alert("11");
                        tran.Commit();                                  //提交事务 
                        return true;                                        //返回True 执行成功! 
                    }
                }
            }
        }
        catch (Exception ex)
        {
            if (null != tran)
                tran.Rollback();
            return false;//返回False 执行失败! 
        }

    }

经测试,可以成功插入,并且速度很快,目前不知道是否有弊端。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值