DataTable,sqlServer批量写入

本文介绍了一种使用C#进行大数据量批量插入的方法,包括数据生成、存储过程调用及SqlBulkCopy批量写入的对比,展示了如何提高数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       static void Main(string[] args)
        {

             List<string> a = new List<string>();
            //生成数据
             while (a.Count<100000) 
             {
                 var result = new StringBuilder();
                 int length = 10;
                 for (var i = 0; i < length; i++)
                 {
                     var r = new Random(Guid.NewGuid().GetHashCode());
                     result.Append(r.Next(0, 10));
                 }
            a.Add(result.ToString().Trim());

            }
           
            
            //创建一个表存数据
            DataTable OrderInfo = new DataTable("OrderInfo");
            OrderInfo.Columns.Add("orderId");
            
            //把数据存到表里
            foreach (string  item in a)
            {
                DataRow dr = OrderInfo.NewRow();
                dr["orderId"] = item;
                OrderInfo.Rows.Add(dr);
                
            }
            string c = "";
          
            ExecuteNoquery("",OrderInfo);
            
            
        }

        public static void ExecuteNoquery(string sqlStr,DataTable info) {
            //读取连接字符串
            string strReadFilePath = @"D:\sqlStr.txt";
            // 读取文件的源路径及其读取流
            StreamReader srReadFile = new StreamReader(strReadFilePath);
            // 读取流直至文件末尾结束
            string strReadLine = "";
            while (!srReadFile.EndOfStream)
            {
                 strReadLine = srReadFile.ReadLine(); //读取每行数据
            }
            // 关闭读取流文件
            srReadFile.Close();
            
            //通过存储过程写入数据
            string conStr = strReadLine;
            SqlConnection con = new SqlConnection(conStr);
            con.Open();
            SqlCommand cmd = new SqlCommand("AddOrderInfo", con);//存储过程名称
            cmd.CommandType = CommandType.StoredProcedure;//调用类型
            cmd.Parameters.Add("orderId","nvarchar(20)"); //存储过程 参数1
            cmd.Parameters.Add("info", "nvarchar(20)");   // 参数 2
            foreach (DataRow item in info.Rows)
	       {
               cmd.Parameters["orderId"].Value = item["orderId"].ToString(); //参数赋值
               cmd.ExecuteNonQuery(); //执行 存储过程
		    }
            
            con.Close();
            /*
             * 
             * //通过 SqlBulkCopy 批量写入数据
            SqlBulkCopy copy = new SqlBulkCopy(con); 
            copy.DestinationTableName = "orderInfo";
            copy.BatchSize = info.Rows.Count;
            
            Stopwatch sw = new Stopwatch(); //程序计时
            sw.Start();
            copy.WriteToServer(info);
            sw.Stop();
            Console.WriteLine("用时:" + sw.ElapsedMilliseconds);
            copy.Close();
            con.Close();


                //通过insert语句写入数据
            con.Open();
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            int rows = cmd.ExecuteNonQuery();
            con.Close();
            return rows;
             */
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值