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