C#使用参数化和块语句来提高批处理SQL语句的执行效率
2009-01-20 16:48
841 查看
当你的项目要求你的程序对高达几万条的数据在集中的时间内执行固定序列的操作,且不能完全使用存储过程时而需要使用程序来执行时。会需要这些优化。 我们知道,SQL服务器对一条语句的执行,需要分析、编译、执行这些步骤,通过参数化我们可以对一种命令只分析和编译一次,而执行多次,从而提高效率。在执行时,如果每次提交语句,可以完成多条SQL语句,则可以减少通讯时间,也可以提高效率。
通过 System.Data.IDbCommand.Prepare() 方法,可以在第一次执行语句时,分析和编译SQL语句,然后保存这个Command对象,下次使用时,直接设置参数执行。这个方法对Oracle和MsSql Server都有效。
如果执行一批语句,在T-SQL和PLSQL中有一点不一样。
在T-SQL中,多条SQL语句之间,使用分号";"分隔就行。
delete from TableA where id = @id;update TableB set Name=@name where id=@id
而在PLSQL中,则需要用 begin ... end; 包起来,中间语句用分号";"分隔。öÆQ³kmÌLJîwww.netcsharp.cnÚåÂÄ?7ëÙm
begin delete from TableA where id = :id;update TableB set Name=:name where id=:id; end;
相信这样做之后,你的效率会有几倍或者十几倍的提升。当然,你还可以对只是查而修改的表,做一下缓存处理,来减小访问数据库的次数。
下面我示例一下访问Oracle执行PLSQL的一个函数的例子
private void DeleteFlowInstanceData(string flowinstanceid) { OracleCommand cmd = this.cmdDeleteFlowInstanceData; if(cmd == null) { //生成SQL StringBuilder sb = new StringBuilder(); sb.Append("begin "); sb.Append(@"delete from bak_WF_Log_EngineLog where FlowInstanceID= :instanceId;"); sb.Append(@"delete from bak_WF_Log_ErrLog where FlowInstanceID= :instanceId;"); sb.Append(@"delete from WF_Running_MsgForEngineBak where FlowInstanceID= :instanceId;"); sb.Append(@"delete from bak_WF_Running_MsgForUser where FlowInstanceID= :instanceId;"); sb.Append(@"delete from bak_WF_Running_FlowActivity where FlowInstanceID= :instanceId;"); sb.Append(@"delete from bak_WF_Running_FlowData where FlowInstanceID= :instanceId;"); sb.Append(@"delete from bak_WF_Running_FlowInstance where FlowInstanceID= :instanceId;"); sb.Append("end;"); //准备 DbCommand this.cmdDeleteFlowInstanceData = cmd = new OracleCommand(); cmd.Connection = this.connEngine; cmd.CommandType = CommandType.Text; cmd.CommandText = sb.ToString(); cmd.Parameters.Clear(); cmd.Parameters.Add("instanceId", OracleType.VarChar,250); //准备一下以提高性能。 cmd.Prepare(); } //设置参数 cmd.Parameters["instanceId"].Value = flowinstanceid; //设置事务 cmd.Transaction = this.tranEngine; cmd.ExecuteNonQuery(); }
原:http://www.netcsharp.cn/showtopic-1790.aspx###
相关文章推荐
- 使用参数化和块语句来提高批处理SQL语句的执行效率
- 使用参数化和块语句来提高批处理SQL语句的执行效率
- 使用参数化和块语句来提高批处理SQL语句的执行效率
- 使用参数化和块语句来提高批处理SQL语句的执行效率(2)
- 批处理SQL语句的执行效率提高的方法
- Statement批量执行sql语句,批量操作数据库,提高数据库效率
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
- C# SQL 语句参数化使用 like 报错
- 如何测试sql语句性能,提高执行效率
- 如何测试sql语句性能,提高执行效率
- 如何测试sql语句性能,提高执行效率
- 提高sql语句执行效率及索引
- 如何测试sql语句性能,提高执行效率
- [SQL_4]提高 SQL语句的执行效率
- 如何提高sql语句的执行效率
- 运用HINT提高SQL语句的执行效率
- 优化sql语句提高oracle执行效率
- 如何测试sql语句性能,提高执行效率
- 如何测试sql语句性能,提高执行效率
- 如何测试sql语句性能,提高执行效率