C#调用oracle存储过程返回数据集 10

需要调用的Oracle存储过程createorreplacePROCEDURE"proc_User_Login"(INusernameinNVARCHAR2,INpass... 需要调用的Oracle存储过程
create or replace
PROCEDURE "proc_User_Login"
( INusername in NVARCHAR2, INpassword in NVARCHAR2 ,V_Table out SYS_REFCURSOR)
IS
BEGIN
open V_Table for
SELECT "BS_User"."id" ,
"BS_User"."UserName" ,
"BS_User"."passWord" ,
"BS_User"."realName" ,
"BS_User"."roleId" ,
"BS_User"."deptmentId" ,
"BS_Dept"."deptName" ,
"BS_Role"."roleName",
"BS_User"."StyleType"
FROM "BS_User"
,"BS_Dept"
,"BS_Role"
WHERE "BS_User"."deptmentId" = "BS_Dept"."deptId"
AND "BS_User"."roleId" = "BS_Role"."roleId"
AND "BS_User"."UserName" = INusername
AND "BS_User"."passWord" = INpassword
AND "BS_User"."delFlag" = 0 and "BS_User"."deptmentId" = "BS_Dept"."deptId" and "BS_User"."roleId" = "BS_Role"."roleId";
END "proc_User_Login";
我要用OracleParameter调用这个存储过程返回的是个DATA也就是结果集
在线等待
展开
 我来答
程序烂人
2013-08-17 · TA获得超过158个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:81万
展开全部
 /// <summary>
  /// 执行存储过程
  /// </summary>
  /// <param name="storedProcName">存储过程名</param>
  /// <param name="parameters">存储过程参数</param>
  /// <param name="tableName">DataSet结果中的表名</param>
  /// <returns>DataSet</returns>
  public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
  {
   using (OracleConnection connection = new OracleConnection(connectionString))
   {
    DataSet dataSet = new DataSet();
    connection.Open();
    OracleDataAdapter sqlDA = new OracleDataAdapter();
    sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters );
    sqlDA.Fill(dataSet, tableName );
    connection.Close();
    return dataSet;
   }
  }  
    /// <summary>
  /// 构建 OracleCommand 对象(用来返回一个结果集,而不是一个整数值)
  /// </summary>
  /// <param name="connection">数据库连接</param>
  /// <param name="storedProcName">存储过程名</param>
  /// <param name="parameters">存储过程参数</param>
  /// <returns>OracleCommand</returns>
  private static OracleCommand BuildQueryCommand(OracleConnection connection,string storedProcName, IDataParameter[] parameters)
  {   
   OracleCommand command = new OracleCommand(storedProcName, connection );
   command.CommandType = CommandType.StoredProcedure;
   foreach (OracleParameter parameter in parameters)
   {
    command.Parameters.Add( parameter );
   }
   return command;   
  }
追问
本人菜鸟
虽然自己弄好了
但是看你这个也很好的样子
给个注释我如果看懂了就给分
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仍然爱华
2013-08-25
知道答主
回答量:19
采纳率:0%
帮助的人:9.4万
展开全部
http://www.cnblogs.com/threestone/archive/2010/08/11/1797384.html
这里可以得到启发,你存储过程应当有点问题,要返程集合,oracle当中一定要用到游标。而游标C#当中有特别类型,游标类型command.Parameters.Add("v_cur", OracleType.Cursor).Direction = ParameterDirection.Output;
追问
我已经成功完成而且不是存储过程的问题,但是感谢您的帮助。
而且告诉您个小秘密,Oracle 返回值 Sys.refcursor 是可以和
sql的默认返回数据集一样使用。不同的只是需要给一个返回的
赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式