动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章
  

 C#中使用Oracle 存储过程笔记

作者来源: 
阅读 数 414 人次 , 2006-4-13 16:12:00 


 

C#中使用Oracle 存储过程笔记

 

1. 调用包含out/ in out类型参数的存储过程

存储过程:

CREATE OR REPLACE PROCEDURE "SITE_EDITSITEDATAEXIST"

 (id_ number,

name_ varchar2,

httpRoot_ varchar2,

flag out integer )//out 只具备输出功能 in out 为输入/输出型

as

tempNum integer;

begin 

  flag:=0;

  select count(id) into tempNum  from WebSite_Info where Name = name_ and ID<>id_;

  if tempNum > 0 then

    flag:=3;

  end if;

  select count(id) into tempNum  from WebSite_Info where HttpRoot = HttpRoot_ and ID<>id_;

  if tempNum > 0 then

    flag:=4;

  end if; 

 

commit;

end ;

/

调用方法:

 

OracleParameter retPar = new OracleParameter(channelId, OracleType.Number);

    retPar.Direction = ParameterDirection.Output;//此处和存储过程中的类型匹配

//如果为in out 类型 此处应声//明InputOutput

OracleParameter[] param = new OracleParameter[ 2 ]

{

      new OracleParameter(subjectId, OracleType.VarChar, 60)

  };       

param[ 0 ].Value = 0;

 

OracleHelper.ExecuteReader( OracleHelper.CONN_STRING_BASE, CommandType.StoredProcedure,

"site_EditSiteDataExist" ,param);

//有返回值时必须使用ExecuteReader方法

    object val = param[ 3 ].Value;    

        return int.Parse( val.ToString() );

 

 

2. 存储过程返回记录集

存储过程必须写在包中,再调用.

包的写法:

CREATE OR REPLACE PACKAGE pkg_cms

AS

  TYPE myrctype IS REF CURSOR; 

  PROCEDURE site_GetSiteData(Id_ number, p_rc OUT myrctype);

 

END pkg_cms;

/

CREATE OR REPLACE PACKAGE BODY pkg_cms

AS

  PROCEDURE site_GetSiteData(Id_ number,p_rc OUT myrctype)

  IS  

  BEGIN  

  OPEN p_rc FOR

  Select  Id, Name, Url, Folder_Name, Desccms, Char_Name,

      DB_Address, DB_User, DB_Password, DB_Name, DB_ConnString, HttpRoot

      From WebSite_Info

      WHERE id=Id_;

  END site_GetSiteData;     

 END pkg_cms;

/

 

调用:

  OracleParameter[] param = new OracleParameter[ 2 ]

    {        

    new OracleParameter(PARM_ID_, OracleType.Number, 8),

new OracleParameter("p_rc", OracleType.Cursor, 2000, ParameterDirection.Output, true, 0, 0, "",DataRowVersion.Default, Convert.DBNull)//此处为包体中声明的游标类型

};

param[ 0 ].Value = siteID;

 

return OracleHelper.ExecuteReader(OracleHelper.CONN_STRING_BASE, CommandType.StoredProcedure,"pkg_cms.site_GetSiteData", param);

//调用时候先写包名

 

 

3. Oracle存储过程中其它的方法

字符串操作

INSTR(STR,Maker)//取字符串中字符的位置

SUBStr(str,beginnum,len)//取子串

To_char()//将数字转到字符串

||  //拼串 相当于+

LENGTH(Oldword) //取字符串长度

时间类

  to_date('dateStr','YYYY-Mi-DD')//字符串转成date”’YYYY-MM-DD’”

  Date1-date2=天数



共同交流 欢迎指正  MSN:yutao728@hotmail.com


 本文Tagsoracle  存储过程  C#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:我的权限控制(JBX + struts + hibernate + ORACLE)
· 下一篇:oracle初始化参数设置
· 用Access设计客观试卷(二)
· MySQL丢了root密码怎么办?
· Delphi中的Access技巧集
· Oracle数据库技术(16)
· Oracle数据库技术(37)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077