我在程序包中写了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的)
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的)
解决方案 »
- sysdba,sysoper,normal区别
- mysql on duplicate key update 如何用oracle中等效语句替代?
- 怎么写这条抽唯一记录的sql
- 删除了ole db 提供程序
- 一个Oracle7.3 for NT数据恢复问题,请高手帮忙
- 版本是否兼容的问题
- 关于pl/sql连接数据库
- oracle 导表问题,急!!!
- 简单问题:orcale下用那个系统库来建用户库。比如在sqlserver中系统一般都使用master数据库来建立其他用户数据库的!
- 违反唯一约束条件(TSSH PK_SDSK_CPCODE_THS_NO)
- PL/SQL过程
- Tomecat连接Oracle问题~~~
procedure p_GetUserDetails_LOGINNAME (loginName in varchar2, myCursor out mytype)
这里的参数loginName和字段名LOGINNAME好象有冲突,不知道Oracle里区不区分大小写,改成ln什么的参数名就好了。
老板总是着急看结果,而不给时间系统学习,为了功能而拼凑代码——编程的悲哀!!
结帖了。