ExecuteNonQuerySql - установить параметр OUT из анонимного блока SQL

У меня есть универсальный обработчик, который я пытаюсь взаимодействовать с хранимой процедурой оракула, но эта хранимая процедура использует параметр 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 - это общедоступная функция общего доступа класса 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 ответ

Я не уверен, что это за уровень данных, но в целом вы должны иметь возможность установить направление параметра. Пожалуйста, смотрите 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, и значение параметра должно быть установлено как ожидалось.

Другие вопросы по тегам