大家都知道在程序中尽量少和数据库交互是可以 提高程序性能的,以下举一个比较常见的例子 如:需要根据 某条件判断条记录是否存在 如果不存在就 插入的这种操作。 一般都会用 2 次数据库io , 1次取 Count 如果=0 就 INSERT INTO 其实在 Oracle, 或 SQL Service 等大型数据库中可以使用批 SQL 语句节省数据库 IO(和数据库的交互). 以下例子是一个简单的的演示执行一次数据库 io(演示使用C# + Oracle数据库演示,其他语言或 SQLService 也差不多), 适合使用在写存储过程没太大意义的时候。 测试代码如下:(注意,测试用的SQL语句中注释过多会影响性能,实际使用不用这么多注释) 语句比较简单,所以没有把表结构贴出来,数据库连接部分省略。 //使用批 SQL 执行(但不能换行和回车 \r\n 不行 \n 可以) //C# 可以用 @ 可以直接换行,VB 写这样的比较郁闷所以用C# 作演示 const string ExecSQl= @”Declare var_bbsitemid VARCHAR2(12) :=:IpBbsitemid ;/*传入参数*/ var_userid VARCHAR2(20) := :IpUserid ;/*传入参数*/ var_counts NUMBER(10); BEGIN /*根据条件取记录条数*/ SELECT COUNT(t.bbsitemid) INTO var_counts FROM ST_BBSMRKTRSLTCHK t WHERE t.userid = var_userid AND t.bbsitemid = var_bbsitemid; /* Oracle 打印不知道怎么看 nnd */ Dbms_Output.put_line(Count:|| var_counts); /*如果是0条就插入*/ IF var_counts = 0 THEN INSERT INTO ST_BBSMRKTRSLTCHK(BBSITEMID, USERID, READFLG, LASTMODIFIED) VALUES (var_bbsitemid, var_userid, 0, SYSDATE); END IF; END;” ; //auto –commit; //必须把\r (换行符)去掉 否则 Oracle 不认而且会报错。 this.cmd.CommandText = ExecSQl.Replace(“\r”,string.Empty); cmd.Parameters.Clear(); OracleParameter Par; //传参数 Par = cmd.Parameters.Add(“:IpBbsitemid”,OracleType.VarChar); Par.Value=”0012″; Par = cmd.Parameters.Add(“:IpUserid”,OracleType.VarChar); Par.Value=”DEF”; try { //如果执行批每次返回都是1 如果想得到真正的更新条数就要用Out的 OracleParameter 了 MessageBox.Show(“执行成功”); catch(Exception ex) { MessageBox.Show(ex.ToString()); }
int returnVar = cmd.ExecuteNonQuery();
}
}
以编程方式使用批语句节省 数据库io来提高性能 _c#应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 以编程方式使用批语句节省 数据库io来提高性能 _c#应用
相关推荐
-      利用c#远程存取access数据库_c#应用
-      c# 3.0新特性系列:隐含类型var_c#教程
-      c#动态生成树型结构的web程序设计_c#应用
-      论c#变得越来越臃肿是不可避免的_c#应用
-      用c#监控并显示cpu状态信息_c#应用
-      c#中实现vb中的createobject方法_c#应用
-      photoshop给花瓶打造彩绘效果_photoshop教程
-      使用c#创建sql server的存储过程_c#应用