欢迎光临
我们一直在努力

以编程方式使用批语句节省 数据库io来提高性能 _c#应用

建站超值云服务器,限时71元/月

    大家都知道在程序中尽量少和数据库交互是可以 提高程序性能的,以下举一个比较常见的例子


如:需要根据 某条件判断条记录是否存在 如果不存在就 插入的这种操作。


一般都会用 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 了



                   int returnVar = cmd.ExecuteNonQuery();                 
                


                   MessageBox.Show(“执行成功”);



              }


              catch(Exception ex)


              {


                   MessageBox.Show(ex.ToString());


              }
                  
             }

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 以编程方式使用批语句节省 数据库io来提高性能 _c#应用
分享到: 更多 (0)