ExecuteNonQuerySql - 从匿名SQL块设置OUT参数

时间:2014-12-05 15:16:11

标签: c# sql .net oracle generic-handler

我有一个通用的处理程序我试图与存储的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

1 个答案:

答案 0 :(得分:1)

我不确定那是什么数据层,但一般来说,你应该能够设置参数方向。请参阅http://msdn.microsoft.com/pl-pl/library/yy6y35y8%28v=vs.110%29.aspxhttp://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值。