网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用C#代码生成一个简单的PDF文件.
..Net框架集WebClient类向WinCE平.
.C# 参考之访问关键字:base、this.
.C#打造自己的文件浏览器.
.如何让数据访问过程更透明.
.Visual C#的SQL Server编程.
.用Visual C#中轻松浏览数据库记.
.如何用C#将数据库中的记录制成XML.
.用 C# 编程实现读写Binary.
.C#设计的一个向导程序(Wizard).
.利用C#实现分布式数据库查询.
.关于C#中的DLLImport.
.C#几种常用的排序算法.
.C#应用访问Microsoft SQL Server.
.怎样在你的应用程序中集成Google.
.C# Google PageRank .net库 (che.
.C#下的查杀进程.
.用C#把文件转换为XML.
.C程序实现汉字内码与GB码.
.列出C#进程以及详细信息.

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

发表日期:2004-12-9


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

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

一般都会用 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#编写一个计时器 人气:16326
下一篇:C#实现的根据年月日计算星期几的函数 人气:16390
浏览全部数据库的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐