我在程序包中写了2个类似的存储过程:第1个是根据登录名返回记录,第2个是根据ID号返回记录。
as
  procedure p_GetUserDetails_LOGINNAME (loginName in varchar2, myCursor out mytype)
  is
  begin
    open myCursor for select * from USERS
    where (LOGINNAME = loginName);
  end;
  
  procedure p_GetUserDetails_OBJECTID (userID in number, myCursor out mytype)
  is
  begin
    open myCursor for select * from USERS
    where (OBJECTID = userID);
  end;
end;
---------------------------------------------------------------
然后我在ASP.NET中调用它们,如:
(1) 登录名查询
   thisConnection.Open ();
   OracleCommand command = new OracleCommand ("pk_account_cj01.p_GetUserDetails_LOGINNAME", thisConnection); 
   command.CommandType = CommandType.StoredProcedure;
   OracleParameter p1 = new OracleParameter ("loginName", OracleType.VarChar); 
   p1.Direction = ParameterDirection.Input;
   p1.Value = "me";
   command.Parameters.Add (p1);
   OracleParameter p2 = new OracleParameter ("myCursor", OracleType.Cursor); 
   p2.Direction = ParameterDirection.Output; 
   command.Parameters.Add (p2); 
   OracleDataAdapter dataAdapter = new OracleDataAdapter (command);
   DataSet dataSet = new DataSet (); 
   dataAdapter.Fill (dataSet, "test");(2)ID号查询
   (省略)
这里,表USERS一共有2条不同的记录,但是(1)返回的就是全部的记录,而(2)只返回1条正确的记录。如果输入的数据未找到,那么(1)还是返回全部的数据,而(2)返回为空。我用SQLPLUS调用等效的语句:
(1) SQL> select * from USERS where (LOGINNAME = 'me');   这里就返回1条正确的记录。
---------------------------------------------
问题就是,为什么在ASP.NET下存储过程(1)不能正确返回记录,而在SQLPLUS下就可以正确返回。
哪位用.NET + ORACLE的高手指点啊。(最终目的还是要用ASP.NET访问ORACLE的)

解决方案 »

  1.   

    没有系统学习过Orcle,一些细节问题就没办法,只能耗时间去解决:
    procedure p_GetUserDetails_LOGINNAME (loginName in varchar2, myCursor out mytype)
    这里的参数loginName和字段名LOGINNAME好象有冲突,不知道Oracle里区不区分大小写,改成ln什么的参数名就好了。
    老板总是着急看结果,而不给时间系统学习,为了功能而拼凑代码——编程的悲哀!!
    结帖了。