sqlserver 批量快速插入数据

先转换成DataTable 然后插入数据
1.使用最后再看看使用表值参数的效率 效率最高。
首先先创建 表值特性类型的表(此表应该与转换后的datatable的列相同不然会出错)
查看地方在:当前数据库下的 可编程性-类型-用户定义表类型

CREATE TYPE MainTable AS TABLE
  (
    Id Int,
    [Gonghao] [varchar](20) NULL,
	[Xingming] [varchar](40) NULL,
	[Bumen] [varchar](40) NULL,
	[KaoqinDate] [datetime] NULL,
	[CreateLine] [int] NULL
)
 /// <summary>
        /// 批量插入数据
        /// </summary>
        /// <param name="dt"></param>
        public ResultMsg  TableValuedToDB(DataTable dt )
        {
            ResultMsg msg = new ResultMsg();
            ServerSet oneSet = new ServerSet();
            oneSet = Common.JsonToIni.GetClass<ServerSet>(Common.ConfigFiles.ConfigFile);
            string ConnectString = $"Data Source={oneSet.DBAdd};Initial Catalog={oneSet.DBName};Integrated Security=false;User ID={oneSet.DBUser};Password={oneSet.DBPwd};Connection Timeout=5;";//mysql链接字符
           SqlConnection sqlConn = new SqlConnection(ConnectString);
            const string TSqlStatement = @"INSERT [KaoqinMain]([Gonghao],[Xingming],[Bumen],[KaoqinDate],[CreateLine])  SELECT   nc.Gonghao,nc.Xingming, nc.Bumen,nc.KaoqinDate,nc.CreateLine  from @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            //表值参数的名字叫MainTable ,上面创建的表特性()。
            catParam.TypeName = "dbo.MainTable";
            try
            {
                sqlConn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                    cmd.ExecuteNonQuery();
                    msg.Success = true;
                }
            }
            catch (Exception ex)
            {
                msg.Success = false;
                msg.ErrMsg = ex.Message; 
            }
            finally
            {
                sqlConn.Close();
            }
            return msg;
        }

2.bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库

public static void BulkToDB(DataTable dt)  
{  
    SqlConnection sqlConn = new SqlConnection(  
        ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);  
    SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);  
    bulkCopy.DestinationTableName = "BulkTestTable";  
    bulkCopy.BatchSize = dt.Rows.Count;  
  
    try  
    {  
        sqlConn.Open();  
    if (dt != null && dt.Rows.Count != 0)  
        bulkCopy.WriteToServer(dt);  
    }  
    catch (Exception ex)  
    {  
        throw ex;  
    }  
    finally  
    {  
        sqlConn.Close();  
        if (bulkCopy != null)  
            bulkCopy.Close();  
    }  
}  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值