利用存储过程解决组合查询的c#程序设计

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:ff520
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍利用oracle存储过程解决C#.net中组合查询的程序设计.其目的就是为程序开发者提供一种解决组合查询的可行性方法,也为类似数据库和语言编程者开发组合查询控件提出一种思路。
  关键词:C#.net;存储过程;组合查询;程序设计
  中图分类号:TP309.05文献标识码:A 文章编号:1009-3044(2008)06-10ppp-0c
  
  Use of storage solution the combined Query’s program design in c#
  LIU Xin
  (Teaching Protection Department of CPAPF,TianJin 300162 China)
  Abstracts:This paper introduces the process of oracle storage solution the combined Query’s program designin C #. Net . Its aim was to develop procedures to provide a solution methods for the feasibility, as well as similar databases and programming languages, development query control ideas.
  Key words:C#.net;combined query;stored procedure;programmer design
  
  在管理系统的程序设计和应用软件开发过程中,我们常常要遇到客户提出各种各样的查询需求,然而这些查询又往往不是单一的查询,而是组合查询,这种组合查询也绝大多不是固定个数的选项,而是让使用者随意组合的情况。这样我们在编程过程中,往往对这些组合查询十分棘手,特别是在书写SQL语句时很复杂,有时要用很多种条件语句的组合才能达到目的。
  鉴于以上原因,本文使用实例将利用oracle存储过程解决C#.net中组合查询的程序设计如下,希望能起到一个抛砖引玉的效果。其程序也可供设计者参考使用。
  
  1 用到的设计语言及关键知识介绍
  
  1.1 语言开发工具
  c#.net,本文使用C#语言作为开发工具,C#是结合了C 强大功能和Visual Basic易用性的新语言,它拥有简洁的OO语法和一个庞大的内库(与.NET和其基础类库相结合),是一种现代的,类型安全的,面向对象的编程语言,它使得程序员能够快速而容易的为微软.NET平台开发解决方案。
  1.2 数据库:
  oracle8i,Oracle 8i是一个面向Internet计算环境的、将Internet特征融入到传统数据库的、面向Web信息管理与发布的数据库系统,它是数据库技术与Web技术的完美结合。
  1.3 oracle数据库存储过程:
  存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  1.4 C#语言调用oracle存储过程:
  c#.net调用oracle 数据库的存储过程。
  
  2 软件界面设计
  
  2.1 数据视图表和表各一个(视图ZTC_VIEW_KYB_BENEFIT_BOOK,表ZTC_KYB_BOOK_TEMP,见下图1只部分字段),由于篇幅有限视图的图忽略。
  
  图2 组合查询初始化界面
  
  图3 部分组合查询选择内容示意图
  
  2.3 程序设计说明
  如上图3,我们可以随意组合不同的下拉框内容,然后点击“查询”按钮,通过查询按钮的代码运行,将视图ZTC_VIEW_KYB_BENEFIT_BOOK中符合组合条件的记录挑选出来通过执行oracle存贮过程(SP_ZTC_KYB_BOOK_TEMP_STR)将记录插入表ZTC_KYB_BOOK_TEMP中。
  
  3 源程序代码介绍
  
  3.1 “查询”按钮的程序代码:
  private void btn_seek_Click(object sender, System.EventArgs e)
   {
  protected System.TimeSpan diff1;//定义变量检测日期是否符合逻辑
  #region判断统计截止日期是否大于或等于统计开始日期
  diff1= System.Convert.ToDateTime(txt_enddate.Text.ToString().Trim()) 
  System.Convert.ToDateTime(txt_startdate.Text.ToString().Trim());//执行两个时间相减操作。
   if (diff1.TotalSeconds>=0)
   {
  insert_ztc_book_temp();//开始查询,调用insert_ztc_book_temp()模块开始
   }
   else
   {
  Response.Write("<script defer>alert('截止日期小于开始日期!');</script>");
   return;//如果截止日期小于开始日期就返回
   }
  # endregion 判断日期结束
   }
   #region//以下是insert_ztc_book_temp()模块
    private void insert_ztc_book_temp()
   {
   //执行查询操作
   try
   {
   objConn.Open();//打开数据库
   objtrans = objConn.BeginTransaction();//定义事务
   OracleCommand objcmd=new OracleCommand();//定义命令
   objcmd.Connection=objConn;//建立连接
   objcmd.CommandType =CommandType.StoredProcedure ;//命令类型:存储过程
   #region//以下为定义变量。
   objcmd.Parameters.Add(new OracleParameter("CS1", OracleType.VarChar,64));
   objcmd.Parameters.Add(new OracleParameter("DN1", OracleType.VarChar, 128));
   objcmd.Parameters.Add(new OracleParameter("WT1", OracleType.VarChar, 16));
   objcmd.Parameters.Add(new OracleParameter("TE1", OracleType.VarChar, 16));
   objcmd.Parameters.Add(new OracleParameter("EL1", OracleType.VarChar, 20));
   objcmd.Parameters.Add(new OracleParameter("RI1", OracleType.VarChar, 20));
   objcmd.Parameters.Add(new OracleParameter("TZ1", OracleType.VarChar, 10));
   objcmd.Parameters.Add(new OracleParameter("ST1", OracleType.VarChar, 20));
   objcmd.Parameters.Add(new OracleParameter("PI1", OracleType.VarChar, 15));
   objcmd.Parameters.Add(new OracleParameter("BS1", OracleType.DateTime, 0));
   objcmd.Parameters.Add(new OracleParameter("BE1", OracleType.DateTime, 0));
  #endregion//定义变量结束。
  #region//以下是取组合查询下拉框中的值赋给定义好的变量。
   objcmd.Parameters ["CS1"].Value =ddldw.SelectedItem.Text;//单位
   objcmd.Parameters ["DN1"].Value =ddlbm.SelectedItem.Text;//部门
   objcmd.Parameters ["WT1"].Value =ddlgwlb.SelectedItem.Text;//岗位类别
   objcmd.Parameters ["TE1"].Value =ddlzzpm.SelectedItem.Text;//作者排名
   objcmd.Parameters ["EL1"].Value =ddlzc.SelectedItem.Text;//职称
   objcmd.Parameters ["RI1"].Value =ddlxl.SelectedItem.Text;//学历
   objcmd.Parameters ["TZ1"].Value =ddlzgzt.SelectedItem.Text;//在岗状态
   objcmd.Parameters ["ST1"].Value =ddljszt.SelectedItem.Text;//晋升状态
   objcmd.Parameters ["PI1"].Value =ddlxmlb.SelectedValue.ToString();//项目类别
   objcmd.Parameters["BS1"].Value=Convert.ToDateTime(txt_startdate.Text);//开始日期
  objcmd.Parameters["BE1"].Value=Convert.ToDateTime(txt_enddate.Text);//结束日期
  #endregion//赋值结束
   objcmd.CommandText ="SP_ZTC_KYB_BOOK_TEMP_STR";//调用oracle存储过程
   objcmd.Transaction =yutrans;//开始事务
   int rowcount1=objcmd.ExecuteNonQuery ();//执行操作!
   if (rowcount1>=0)
   {
   objtrans.Commit();//成功后提交事务
   if (objConn.State.ToString()=="Open") objConn.Close();//关闭数据库
   }
   }
   catch
   {
   objtrans.Rollback ();//如果不成功,回滚事物
  Response.Write("<script defer>alert('程序有错误,速与程序供应商联系!');</script>");
   }
   finally
   {
   if (objConn.State.ToString()=="Open") objConn.Close();//最后关闭数据库
   }
   }
  # endregion 调用insert_ztc_book_temp()模块结束
  3.2 oracle中的存储过程代码介绍:
  它是组合查询的关键,解决将视图ZTC_VIEW_KYB_BENEFIT_BOOK中符合组合条件的记录挑选出来插入表ZTC_KYB_BOOK_TEMP中,考虑篇幅只出入部分字段。过程名为SP_ZTC_KYB_BOOK_TEMP_STR。
  create or replace procedure SP_ZTC_KYB_BOOK_TEMP_STR
   (--以下是接受传过来的参数值
  CS1 in string,
  DN1 in string,
   WT1 in string,
   TE1 in string,
   EL1 in string,
  RI1 in string,
   TZ1 in string,
   ST1 in string,
  PI1 in string,
  BS1 in date,
  BE1 in date
  )
  as
  cursor cur_detail is
  SELECT USEIDSN,
   PROJ_ID,
   FOUND_DATE_YEAR,
   SCOR,
   SNONLY,
   ZTC_VIEW_KYB_BENEFIT_BOOK.SN
  FROM ZTC_VIEW_KYB_BENEFIT_BOOK
  where 
  instr(decode(CS1,'---请选择---',NVL(CS,'0'),CS1),NVL(CS,'0'))>0 and
  instr(decode(DN1,'---请选择---',NVL(DN,'0'),DN1),NVL(DN,'0'))>0 and
  instr(decode(WT1,'---请选择---',NVL(WT,'0'),WT1),NVL(WT,'0'))>0 and
  instr(decode(TE1,'---请选择---',NVL(TE,'0'),TE1),NVL(TE,'0'))>0 and
  instr(decode(EL1,'---请选择---',NVL(EL,'0'),EL1),NVL(EL,'0'))>0 and
  instr(decode(RI1,'---请选择---',NVL(RI,'0'),RI1),NVL(RI,'0'))>0 and
  instr(decode(TZ1,'---请选择---',NVL(TZ,'0'),TZ1),NVL(TZ,'0'))>0 and
  instr(decode(ST1,'---请选择---',NVL(ST,'0'),ST1),NVL(ST,'0'))>0 and
  instr(decode(PI1,'---请选择---',NVL(PI,'0'),PI1),NVL(PI,'0'))>0 and
  FOUND_DATE between BS1 and BE1; 
  begin
   delete from ZTC_KYB_BOOK_TEMP;
   commit;
  for cur_row in cur_detail loop
   insert into ZTC_KYB_BOOK_TEMP(
  "USEID_SN",
  "PROJ_ID",
  "FOUND_DATE_YEAR",
  "SCORE",
  "SNONLY",
  "START_DATE",
  "END_DATE",
  "BENEFIT_BOOK_SN"
  )values(
  cur_row.USEIDSN,
  cur_row.PROJ_ID,
  cur_row.FOUND_DATE_YEAR,
  cur_row.SCOR,
  cur_row.SNONLY,
  TO_CHAR(BS1,'yyyy-mm-dd'),
  TO_CHAR(BE1,'yyyy-mm-dd'),
  cur_row.SN
  );
   end loop;
   commit;
   end;
  
  4 结束语
  
  本文介绍了利用存储过程解决组合查询的问题,只是查询中的一种。在平时我们的程序设计过程中还有模糊查询以及对一个字段其内容进行一定范围的查询,这都需要我们编程序解决,在这里就不一一介绍了,利用oracle的存储过程能很好的解决这些问题,并且执行速度很快。
  
  参考文献:
  [1]侯晓霞等. C#技术内幕[M]. 清华大学出版社.2002.
  [2]台湾恒逸资讯. C#与.net技术平台实战演练[M]. 中国青年出版社,2002.
  
  收稿日期:2008-01-12
  作者简介:刘昕,男,山东省泰安人,本科学历,讲师,教保处参谋,研究方向:教学保障。
其他文献
摘要:在实时点播系统中对异步的服务请求的处理,是通过在Peer节点上缓存目标节目部分段的数据,让新节点加入时直接从Peer节点获取数据,可以在很大程度上减少对源服务器带宽资源的占用。基于单棵组播树,本文研究如何对Peer节点进行组织,以适应大规模实时点播系统的应用需求。  关键词:P2P;实时点播;流媒体;对等网络  中图分类号:TP37文献标识码:A文章编号:1009-3044(2008)04-
摘要:SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的通信协议。本文在分析基于SOAP的Web服务结构以及SOAP消息构成后,提出了一种加强Web服务安全的SOAP数字签名技术,确保了Web服务完整性和安全性.  关键词:Web服务;简单对象访问协议;数字签名;可扩展标记语言  中图分类号:TP393文献标识码:A文章编号:1009-304
摘要:基于IEEE802.15.4标准的ZigBee技术具有低成本、近距离、低功耗的优点,正符合未来一些无线互连设备的需要。本文首先介绍了Zigbee技术的概念、特点和协议模型,在此基础上探讨了ZigBee技术的应用并与其他几种无线通信技术做了比较。  关键词:ZigBee技术;IEEE802.15.4;无线通信  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2008)06
摘要:视频点播(VOD)是一种以用户为主导的音视频信息系统。传统的VOD系统多是C/S模式采用服务器机群或者代理缓存的方式来实现,这会带来较大的硬件和管理开销,系统扩展性也难以得到保证。文中提出了一种基于P2P结构的视频点播的设计方案,分析了采用P2P技术以后视频点播系统对于节点闲散资源的利用和保证播放质量等方面的优势,并探讨了在系统设计与实现中的相关技术与方法。  关键词:视频点播;P2P;缓存
摘要:服务器漏洞是安全问题的起源。只有了解可能存在或潜在的安全问题,才能采取相应的防护对策,保证Oracle数据库的安全性。本文讨论了基于Oracle数据库下服务器可能出现的一些安全问题,并提出了相应的安全防护对策。  关键词:oracle数据库;服务器;安全问题;防护对策  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)06-00ppp-0c    Server S
摘要:共享网络带宽是网络用户非常关注的一个问题。HomeShare是一款易于宽带用户使用的共享软件,适应于以太网、ADSL、有线宽带、WLAN等。HomeShare提供了5种网络连接方式,本文针对5种不同连接方式下的设置进行比较说明。  关键词:HomeShare;共享网络;无路由器  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)04-1pppp-0c    Net
摘要:初步探讨了数字校园建设中应用WebGIS技术构建电子地图的思路与开发流程,定义了数据结构,对系统的总体框架、系统功能、数据库进行了设计。  关键词: WebGIS;电子地图;地理信息系统;数字校园  中图分类号:TP315文献标识码:A文章编号:1009-3044(2008)06-00ppp-0c    The Preliminary of Campus Construction Based
摘要:本文首先阐述了ACD的排队理论;其次对先到先服务、优先级服务的排队策略,基于负载均衡、座席技能级别、客户信息和经验的路由算法进行了详细地分析;最后提出可根据呼叫到达时间、主叫号码、DNIS、用户可接受的等待时间、客户等级多项参数进行线性加权确定优先级的排队算法策略,根据系统规模、服务效率、客户信息等来综合地确定路由分配方法,真正实现合理的排队和智能的路由分配。  关键词:呼叫中心;ACD;排
摘要:随着Internet的普及,电子邮件已经逐渐取代传统邮件日益广泛地影响着我们的生活与工作,而邮局协议是保证我们通过客户端软件成功获取电子邮件的协议。本文结合目前市场功能最强大的协议分析软件Sniffer Pro对邮局协议进行直观的分析与研究。  关键词:Sniffer Pro;POP3;电子邮件  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)06-10ppp-
摘要:IP地址作为一种稀缺的网络资源,如何合理充分的使用是值得研究的问题。本文从网络系统设计的角度,以子网掩码、网络号的概念、应用、计算等内容对IP地址规划做了较为详细的叙述。  关键词:IP地址;网路设计;子网掩码  中图分类号:TP309.5文献标识码:A文章编号:1009-3044(2008)06-10ppp-0c    IP Address Planning Study In Networ