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也就是结果集
在线等待 展开
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也就是结果集
在线等待 展开
2个回答
展开全部
/// <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;
}
追问
本人菜鸟
虽然自己弄好了
但是看你这个也很好的样子
给个注释我如果看懂了就给分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://www.cnblogs.com/threestone/archive/2010/08/11/1797384.html
这里可以得到启发,你存储过程应当有点问题,要返程集合,oracle当中一定要用到游标。而游标C#当中有特别类型,游标类型command.Parameters.Add("v_cur", OracleType.Cursor).Direction = ParameterDirection.Output;
这里可以得到启发,你存储过程应当有点问题,要返程集合,oracle当中一定要用到游标。而游标C#当中有特别类型,游标类型command.Parameters.Add("v_cur", OracleType.Cursor).Direction = ParameterDirection.Output;
追问
我已经成功完成而且不是存储过程的问题,但是感谢您的帮助。
而且告诉您个小秘密,Oracle 返回值 Sys.refcursor 是可以和
sql的默认返回数据集一样使用。不同的只是需要给一个返回的
赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询