如果不考虑事务,当执行多条INSERT、UPDATE、DELETE时。
使用分号,还是通过循环一个list<string>去做ExecuteNonQuery。
如:
string commandTexts = "INSERT INTO S_USER (ID, NAME, GENDER) VALUES ('1', '2', 1);
INSERT INTO S_USER (ID, NAME, GENDER) VALUES ('2', '2', 1)";
还是:
using (IDbCommand command = new SqlCommand())
{
int count = 0;
// 打开数据库连接对象。
command.Connection = connection;
this.OpenConnection();
foreach (string commandText in commandTexts)
{
// 执行操作。
command.CommandText = commandText;
count += command.ExecuteNonQuery();
}
// 返回受影响的行数。
return count;
}
好像ORACLE不支持第一种通过;方式的执行吧。
第二种会存在效率问题吗?我可以在catch里加rollback。
1、用参数化方式;
2、ORACLE 可以使用数组参数;
你是想并行执行多条数据的话,可以考虑使用 Parallel,用例的话可以看msdn
http://msdn.microsoft.com/zh-cn/library/system.threading.tasks.parallel%28v=vs.110%29.aspx
像这样 拼一条sql 然后执行 如果 sql数量很多的话,每100条执行一次。
insert into test_do(age)
select 13 from dual union all
select 23 from dual union all
select 53 from dual
使用dataset来提交数据,它会自动给你一次发送到数据库
把多条语句拼接在一起性能会好很多,所以用第一种方式,
不过你得做好事务,否则出错了就悲剧了
好像是SQL 2008,具体哪个版本不记得了,出了一个叫表值参数的,就是你可以把一个table作为存储过程参数传进去,然后想怎么玩怎么玩。