CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

再开一帖请教,简单的C#调用ORACLE的存储过程,好象应答的人很少啊

楼主cgj36254605(请问,马桶哪里有)2006-06-01 18:35:50 在 .NET技术 / C# 提问

我下面描述的比较详细,是为了大家帮我解决问题,有心人稍微耐心一点,都是非常简单明了的描述:  
   
  表(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

相关问题

关键词

得分解答快速导航

  • 帖主:cgj36254605
  • kssys

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo