with a name other than "cur_OUT," you must explicitly add a parameter for each cursor to the command. Similarly, if your stored procedure contains multiple cursors, you must explicitly add each cursor parameter to the command.
这下我就明白了
。在我的oracle函数中
,我的名字 cur_Static_User 和默认的名字cur_OUT不匹配
。 于是我就改了我的存储过程的参数名称
,cur_Static_User改为 cur_OUT。
问题就解决了。
经过试验,也可以用如下方法用自己的参数名,而不用默认的参数名。
也可以,在一个PROCEDURE中返回多个 CURSOR
我的存储过程:
Procedure STATIC_USER_SelectAll
( cur_OUT_f OUT T_OUT, cur_OUT_g OUT T_OUT)
AS
Begin
OPEN cur_OUT_f FOR Select * from STATIC_USER;
OPEN cur_OUT_g FOR Select * from STATIC_ROLE;
End;
代码如下:
Database db = DatabaseFactory.CreateDatabase("oraserver");
string sqlCommand = "Static_UserPackage.STATIC_USER_SelectAll";
Microsoft.Practices.EnterpriseLibrary.Data.
Oracle.
OracleCommandWrapper dbCommandWrapper =(Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleCommandWrapper)db.GetStoredProcCommandWrapper(sqlCommand);
dbCommandWrapper.AddParameter("cur_OUT_f", OracleType.Cursor, 0, ParameterDirection.Output, true, 0, 0, String.Empty, DataRowVersion.Default, Convert.DBNull);
dbCommandWrapper.AddParameter("cur_OUT_g", OracleType.Cursor, 0, ParameterDirection.Output, true, 0, 0, String.Empty, DataRowVersion.Default, Convert.DBNull);
DataSet dsCustomers = db.ExecuteDataSet(dbCommandWrapper);
DataGrid1.DataSource=dsCustomers.Tables[0];
DataGrid1.DataBind();
DataGrid2.DataSource=dsCustomers.Tables[1];
DataGrid2.DataBind();