我有一个通用的处理程序我试图与存储的oracle过程进行交互,但是这个存储过程使用了out参数
我在一些其他文件之后模式化我的工作,它基本上使用listDictionary将参数传递给ExecuteNonQuerySql,就像这样
ListDictionary AddParams = new ListDictionary();
//the In variables, they work fine
AddParams.Add("type", context.Request["type"]);
AddParams.Add("idnumber", context.Request["idnumber"]);
// here is the out variable I want
AddParams.Add("o_out", 0);
string sSql = @" begin schema.stored_proc( :type, :idnumber, :o_out) ; end;";
dbi.ExecuteNonQuerySql(sSql, AddParams);
results = "{ \"result\": "+AddParams["o_out"]+" }";
context.Response.Write(results);
目前只有0返回,因为最初设置,它没有被覆盖,我希望o_out是-1 0或1,这将是proc将返回的内容
关于如何在这种情况下返回proc out变量的任何建议?
编辑:
ExecuteNonQuerySql是Database Interface类的公共共享函数(在下面发布,看起来像VB)...因为我使用通用处理程序来访问它,所以可能是使用listdictioary作为参数列表的方法,我不认为会让我设定方向
Public Class DBInterface
...
Public Shared Function ExecuteNonQuerySql(ByVal sqlStatement As String, _
ByVal cmdType As CommandType, _
ByVal trans As IDbTransaction, _
ByVal parameters As IDictionary) As Integer
If trans Is Nothing Then Throw New ArgumentNullException("trans")
Using cmdDyn As New OracleCommand(sqlStatement, DirectCast(trans.Connection, OracleConnection))
cmdDyn.CommandType = cmdType
ApplyParameterList(cmdDyn, parameters)
Return cmdDyn.ExecuteNonQuery()
End Using
End Function
答案 0 :(得分:1)
我不确定那是什么数据层,但一般来说,你应该能够设置参数方向。请参阅http://msdn.microsoft.com/pl-pl/library/yy6y35y8%28v=vs.110%29.aspx和http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.parameters%28v=vs.110%29.aspx
编辑:
呃哦,是不是vb? :)我相信你需要创建显式查询参数并设置它的方向。隐含的方式 - 就像你在代码中一样,我猜因为没有ApplyParameterList代码可用 - 总是在"中创建"参数。所以它应该是这样的:
var outParam=new OracleParameter("o_out",value){Direction=ParameterDirection.Output};
然后以某种方式将它传递给你的ExecNonQuerySql方法并添加到cmdDyn.Parameters:
cmdDyn.Parameters.add(outParam)
然后调用ExecNonQuery,并且应该按预期设置param值。