Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 以编程方式使用批语句节省 数据库IO来提高性能
【标  题】:以编程方式使用批语句节省 数据库IO来提高性能
【关键字】:性能,数据库,编程,IO
【来  源】:网络

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

Your Ad Here

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

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

一般都会用 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());

              }
                  
             }

C#实现大文件分块发送到客户端:【上一篇】
利用C#实现标准的 Dispose模式:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Fireworks MX Mac按钮
  • Events Sample Code(2)
  • Inside Class Loaders
  • google notebook 的firefox扩展的安装
  • 复制数据库
  • 解决IE属性主页不能修改
  • 列目录树的SHELL脚本
  • 2002年航空物流发展分析与2003年展望(上)
  • 让我激动的CSS+DIV开发利器--GoLive
  • 设定ls指令的显示颜色
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.