您的位置:首页 > 数据库 > Oracle

发布Oracle存储过程包c#代码生成工具(CodeRobot)

2006-07-31 17:53 781 查看

发布Oracle存储过程包c#代码生成工具(CodeRobot)

无可致否,代码生成器对于程序员的帮助是越来越大。网上出现了一些优秀的代码工具,比较出名的如:CodeSmith, MyGeneration。但我一直没有找到直接将oracle存储过程包转化为c#的工具或模板(有谁知道告知我啊非常感谢!:),故在工作中编写了CodeRobot这个小冬冬(下载),使用起来是比较方便的。以下简要说明一下使用方法:

(1)生成的代码基于OracleBase类(用于数据库开闭及command参数预处理)。请将该类包含进工程。
(2)数据库连接字符串默认保存在工程的config配置文件中,如


<add key="ConnStr" value="data source=portal; user id=user; password=pass;"/>
(3)对于字符串类型的输出参数,在生成C#代码类似


AddCmdParamOut(cmd, "P_NAME", OracleType.VarChar, #length#);
的代码,请将#length#改成对应字段的实际长度
(4)对于游标类型的输出参数,在oracle中定义为:


type genrefcur is ref cursor;


procedure example(p_id int, p_cur out genrefcur);
则生成C#代码为:


public void EXAMPLE(long P_ID, out OracleDataReader P_CUR)
(5)使用代码如:


using (DbExample db = new DbExample)






{


db.FUNC1(..);


db.FUNC2(..);


}

发表于 2005-12-21 10:19 Kevin Cheng 阅读(561) 评论(11) 编辑 收藏 引用 收藏至365Key 所属分类: 代码生成器



评论

大哥的工具真是不错

能否先告诉小弟,9i里的 存储过程的参数类型,参数名,输入输出参数等 怎么获取
参数类型,参数名,输入输出参数等

user_procedues 的列 没见哪个是参数信息的
井泉2 评论于 2005-12-21 13:11

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
求大哥,
告诉小弟,
我这几天找oracle的数据字典,找到了一些相关表就是,All_source
All_procedues,
可就是找不到参数的具体信息,参数类型,名称,和输入输出信息,
望大哥能指点迷津
井泉2 评论于 2005-12-21 13:20

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
在线等
井泉2 评论于 2005-12-21 13:20

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
还有一个困绕小弟的问题是,再包里面的存储过程,内部变量怎么不能声明,多个
只能一个,
(内部变量)
声明方法一:
begin Declare 变量名 类型;
声明方法二:
变量名 类型;

方法一只能声明一个,
方法二干脆抱错
井泉2 评论于 2005-12-21 13:25

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
在线等
井泉2 评论于 2005-12-21 15:40

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
昨天的23:59:59 秒怎么求??
井泉2 评论于 2005-12-21 16:03

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
工具不错
高海东 评论于 2005-12-21 20:03

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
在线等
井泉2 评论于 2005-12-22 08:39

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
USER_ARGUMENTS 原来是这个表
井泉2 评论于 2005-12-22 09:14

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
To 井泉2: 不好意思,我今天才看见你的留言,显然你已经找到你需要的答案了:)。我再贴一下,希望对有需要的人有帮助:
SQL> desc sys.argument$
名称 是否为空? 类型
-------------------------------------------------------------
OBJ# NOT NULL NUMBER
PROCEDURE$ VARCHAR2(30)
OVERLOAD# NOT NULL NUMBER
PROCEDURE# NUMBER
POSITION# NOT NULL NUMBER
SEQUENCE# NOT NULL NUMBER
LEVEL# NOT NULL NUMBER
ARGUMENT VARCHAR2(30)
TYPE# NOT NULL NUMBER
CHARSETID NUMBER
CHARSETFORM NUMBER
DEFAULT# NUMBER
IN_OUT NUMBER
PROPERTIES NUMBER
LENGTH NUMBER
PRECISION# NUMBER
SCALE NUMBER
RADIX NUMBER
DEFLENGTH NUMBER
DEFAULT$ LONG
TYPE_OWNER VARCHAR2(30)
TYPE_NAME VARCHAR2(30)
TYPE_SUBNAME VARCHAR2(30)
TYPE_LINKNAME VARCHAR2(128)
'------------------------------------------------------------

注:<1>若方法有个参数的ARGUMENT(参数名)为空,则该方法是存储函数
<2>参数为游标类型(OracleType.Cursor)的判断:TYPE# = 121

Kevin.C 评论于 2005-12-23 15:37

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
To 井泉2:
还有,你另外一个问题(存储过程内部参数的定义),不知道下面这段示例代码能不能帮助你:
procedure example_func(p_dept_id number)
is
v_year int := extract(year from add_months(sysdate,-1));
v_month int := extract(month from add_months(sysdate,-1)) ;
v_start_date date := trunc(sysdate, 'month') + 4;
begin
insert into assess_sheet
(
...
Kevin.C 评论于 2005-12-23 15:43

# re: 发布Oracle存储过程包c#代码生成工具(CodeRobot) 回复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐