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

本文关键字:设置 OUT 参数 SQL ExecuteNonQuerySql | 更新日期: 2023-09-27 18:33:25

我有一个通用处理程序,我正在尝试与存储的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 var 的任何建议?

编辑:

ExecuteNonQuerySql 是数据库接口类的公共共享函数(发布在下面,看起来像 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

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

我不确定那是什么数据层,但一般来说,您应该能够设置参数方向。请参阅 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 代码 - 总是创建"in"参数。所以它应该是这样的:

var outParam=new OracleParameter("o_out",value){Direction=ParameterDirection.Output};

然后以某种方式将其传递给您的ExecNonQuerySql方法并添加到cmdDyn.Parameters:

cmdDyn.Parameters.add(outParam)

然后调用 ExecNonQuery,参数值应按预期设置。