当前位置:编程学习 > C#/ASP.NET >>

C#中一次性大批量插入数据库

大概描述下,C#有string s = 1,2,3,4,5,6,7,8,9,0; 想一次性插入到数据库里面,单次循环一次一次插入的话太慢了,一次插入在几万到十万的数据就非常慢,所以想一次性插入数据库,sql语句这样,insert into table([id],[nameid]) select newid(),'1' union all  select newid(),'2' union all union all  select newid(),'3'     .......,现在就是不知道C#中应该怎么去写循环和数组,因为S的长短不一定,求大神!  数据库 C# SQL --------------------编程问答-------------------- 这不太现实吧,这样的sql语句,如果要插入10万条数据,s字符串长度会大于3M,sqlserver允许这么长的sql语句吗?即使可以,执行速度比循环插入快? --------------------编程问答-------------------- 是不是可以考虑将数据转成dataTable,然后用IDbCommand和DataBase.UpdateDataSet方法将DataTable的数据更新到数据库的某个表里面去 --------------------编程问答-------------------- s = "1,2,3,...";
sql = "insert into table([id],[nameid]) " + string.Join(" union all ", s.Split(',').Select(x => "select newid(),'" + x + "'")); --------------------编程问答--------------------
引用 1 楼 stonespace 的回复:
这不太现实吧,这样的sql语句,如果要插入10万条数据,s字符串长度会大于3M,sqlserver允许这么长的sql语句吗?即使可以,执行速度比循环插入快?


s长度我会控制,不超过1000,应该没问题,我自己测试的,如果发1w,我自己切割成10个1000,插入只需要10次,但是循环的话就是1w次,,速度差的很大 --------------------编程问答-------------------- 使用 sql事务Transaction 进行提交
每1000条进行一次Commit
看是否有帮助 --------------------编程问答-------------------- 请问是sqlserver数据库吗?可以考虑用SqlBulkCopy --------------------编程问答-------------------- 我比较关心循环插入到底是否像LZ说的那样“慢”???? --------------------编程问答-------------------- 先把数据放到DataTable 再用SqlBulkCopy批量插入 --------------------编程问答-------------------- 生成格式文本,用数据库批导,100万条也就1秒搞定 --------------------编程问答--------------------
引用 楼主 linchenyuyin 的回复:
大概描述下,C#有string s = 1,2,3,4,5,6,7,8,9,0; 想一次性插入到数据库里面,单次循环一次一次插入的话太慢了,一次插入在几万到十万的数据就非常慢,所以想一次性插入数据库,sql语句这样,insert into table([id],[nameid]) select newid(),'1' union all  select newid(),'2' union all union all  select newid(),'3'     .......,现在就是不知道C#中应该怎么去写循环和数组,因为S的长短不一定,求大神! 

用SqlBulkCopy或者事物是最好的选择 --------------------编程问答-------------------- 用BI吧。。。 --------------------编程问答-------------------- BulkCopy oracle,sqlserver都支持。 --------------------编程问答-------------------- 考虑参数化吧
你这个不太好  
每次都需要重新编译SQL语句
参数化可以1000条或者更多条一次提交事务 --------------------编程问答-------------------- OleDbDataAdapter.Adapter.Update(); --------------------编程问答-------------------- 更正:OleDbDataAdapter.Adapter.Update();
=>
OleDbDataAdapter adapter;
OleDbCommand cmd = new OleDbCommand("insert ...", connection);
cmd.Parameters.Add("col1", OleDbType.Char, 50, "col1");
...
adapter.InsertCommand = cmd;
...
adapter.Update();
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,