首页 新闻 会员 周边 捐助

关于C#写数据访问的一个小问题。

0
[已解决问题] 解决于 2014-12-28 21:41

如果不考虑事务,当执行多条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。

c#
TheBlackPearl的主页 TheBlackPearl | 初学一级 | 园豆:7
提问于:2014-12-11 22:38
< >
分享
最佳答案
0

1、用参数化方式;

2、ORACLE 可以使用数组参数;

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-12-12 09:18
其他回答(5)
0

你是想并行执行多条数据的话,可以考虑使用 Parallel,用例的话可以看msdn

http://msdn.microsoft.com/zh-cn/library/system.threading.tasks.parallel%28v=vs.110%29.aspx

yangsofter | 园豆:199 (初学一级) | 2014-12-12 11:41
0

像这样 拼一条sql 然后执行 如果 sql数量很多的话,每100条执行一次。

insert into test_do(age)
select 13 from dual union all
select 23 from dual union all
select 53 from dual

 

乐上 | 园豆:8 (初学一级) | 2014-12-12 15:53
0

使用dataset来提交数据,它会自动给你一次发送到数据库

arg | 园豆:1047 (小虾三级) | 2014-12-12 16:50
0

 把多条语句拼接在一起性能会好很多,所以用第一种方式,

 不过你得做好事务,否则出错了就悲剧了

xmj112288 | 园豆:126 (初学一级) | 2014-12-12 18:25
0

  

好像是SQL 2008,具体哪个版本不记得了,出了一个叫表值参数的,就是你可以把一个table作为存储过程参数传进去,然后想怎么玩怎么玩。

空明流光 | 园豆:111 (初学一级) | 2014-12-16 13:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册