再开一帖请教,简单的C#调用ORACLE的存储过程,好象应答的人很少啊
我下面描述的比较详细,是为了大家帮我解决问题,有心人稍微耐心一点,都是非常简单明了的描述:
表(UserTable)结构很简单:
USER_CODE VARCHAR2(6) //用户代码
USER_NAME VARCHAR2(10) //用户名
USER_PWD VARCHAR2(6) //口令
USER_TYPE VARCHAR2(4) //用户类型
里面一条记录
USER_CODE USER_NAME USER_PWD USER_TYPE
1001 cgp 1234 1
-------------------------------------------
存储过程也很简单,查是否存在该用户代码,返回1表示存在,返回0表示不存在
create or replace procedure sp_userlogin(xino_UID in varchar2,icount out integer)
as
tempNum integer;
begin
Select count(*) into tempNum from UserTable where User_Code=xino_UID;
if tempNum>0 then
icount:=0;
end if;
if tempNum=0 then
icount:=1;
end if;
commit;
end;
-----------------------------------------
C#的调用也很简单:
OracleParameter[] param ={ new OracleParameter("xino_UID",OracleType.VarChar,6),
new OracleParamete("icount",OracleType.Number,
0,ParameterDirection.ReturnValue,false,
0,0,"",DataRowVersion.Default,null)};
//上面就是对应存储过程的两个参数,一个输入,一个输出
param[0].Value="1001";//用户代码为1001,表中是存在的
param[1].Direction=ParameterDirection.Output;//输出的参数
connstr="Data Source=mysample;user=system;password=manager;";//连接串,肯定不会错的
OracleConnection connection = new OracleConnection(connstr);
OracleCommand command = new OracleCommand("sp_userlogin", connection);
command.CommandType = CommandType.StoredProcedure;
foreach(OracleParameter parameter in param) //参数加载
command.Parameters.Add(parameter);
connection.Open();
command.ExecuteNonQuery();//如果没有上面param[1].Direction这句在这里就会出错
//说参数类型或个数错误
object val = param[1].Value; //并不能返回1啊
return int.Parse(val.ToString());
connection.Close();
------------------------------------------------------
另外,我在oracle客户端SQL*PLUS上测试存储过程
SQL>exec sp_userlogin('1001');
怎么会出错:PLS-00306: 调用 'SP_USERLOGIN' 时参数个数或类型错误?
问题点数:50、回复次数:10Top
1 楼kssys()回复于 2006-06-01 18:46:01 得分 50
你的存储过程写得有点怪啊
不懂Orical的语法,随便讲的
//如果有东西,返回0?
if tempNum>0 then
icount:=0;
end if;
//如果没东西,返回1?
if tempNum=0 then
icount:=1;
end if;
commit;
end;Top
2 楼kssys()回复于 2006-06-01 18:46:12 得分 0
出现错误,可能你的参数不全。Top
3 楼cgj36254605(请问,马桶哪里有)回复于 2006-06-02 11:02:11 得分 0
还有没有人?Top
4 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-06-02 11:18:23 得分 0
ORACLE的不是很了解,
不过那个select语句看的有点不舒服,偶的印象中,
Store pro中的参数,都应该加个@吧…..
Top
5 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-06-02 11:24:06 得分 0
Select count(*) into tempNum from UserTable where User_Code=xino_UID;
要是改成,
set @xino_UID=xino_UID
Select count(*) into tempNum from UserTable where User_Code=@xino_UID;
偶看起來舒服,呵呵Top
6 楼cgj36254605(请问,马桶哪里有)回复于 2006-06-02 11:54:04 得分 0
没有一个人会,CSDN里面的水平可见一斑
这应该是最常用的C#+ORACLE
上面写的是MSSQL的,不符合ORACLE的写法Top
7 楼kssys()回复于 2006-06-02 14:11:29 得分 0
显然,你问错地方了,到数据库版块去问,这边都是初学者Top
8 楼jinqi1979()回复于 2006-06-02 14:17:10 得分 0
Select count(*) into tempNum from UserTable where User_Code=xino_UID;
if tempNum>0 then --这里是不是错了,有数据的话,icount返回0
icount:=0;
end if;
if tempNum=0 then --这里是不是错了,没有数据的话,icount返回1
icount:=1;
end if;
Top
9 楼amandag(高歌)回复于 2006-06-02 14:18:43 得分 0
晚上帮看Top
10 楼jinqi1979()回复于 2006-06-02 14:21:47 得分 0
SQL>exec sp_userlogin('1001');
测试方法也不对,一共两个参数(输出参数也要传),传了一个进去当然出错。Top




