Dapper - хранимая процедура oracle не возвращает результат, если больше двух параметров OUT
Можете мне помочь. Я не получил результат в моем коде? если я использую Dapper.
using(var connection = new OracleConnection("User ID=TEST;Password=TEST;data source=R_TEST"))
{
connection.Open();
var p = new OracleDynamicParameters();
p.Add("V_IN", "123456789874");
p.Add("VO_T1", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("VO_T2", dbType: DbType.Varchar2, direction: ParameterDirection.Output);
p.Add("VO_T3", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("VO_T4", dbType: DbType.Varchar2, direction: ParameterDirection.Output);
p.Add("VO_T5", dbType: DbType.Varchar2, direction: ParameterDirection.Output);
var result = connection.Query("WS_PKG.MY_PROCEDURE", p, commandType: CommandType.StoredProcedure);
}
Быт, если я пытаюсь получить результат, используя код руки. Используйте SqlDataReader. Я получаю результат успешно.
Посмотрите на этот код. там я использую с SqlDataReader:
connection.Open();
OracleCommand command = new OracleCommand("WS_PKG.GETINFOFROMNBBYIIN", connection);
command.CommandType = CommandType.StoredProcedure;
command.BindByName = true;
command.Parameters.Add("V_IN", OracleDbType.Varchar2, 25, iin, ParameterDirection.Input);
var VO_T1 = command.Parameters.Add("VO_T1", OracleDbType.Int32, 10, default(int), ParameterDirection.Output);
var VO_T2 = command.Parameters.Add("VO_T2", OracleDbType.Varchar2, 1024, default(string), ParameterDirection.Output);
var VO_T3 = command.Parameters.Add("VO_T3", OracleDbType.Int32, 10, default(int), ParameterDirection.Output);
var VO_T4 = command.Parameters.Add("VO_T4", OracleDbType.Varchar2, 1024, default(string), ParameterDirection.Output);
var VO_T5 = command.Parameters.Add("VO_T5", OracleDbType.Varchar2, 1024, default(string), ParameterDirection.Output);
command.ExecuteNonQuery();
Спасибо за вашу помощь, ребята.
1 ответ
Добрый день. Я забыл добавить переменную размера. Посмотрите на пример кода:
enter code hereusing(var connection = new OracleConnection("User ID=TEST;Password=TEST;data source=R_TEST"))
{
connection.Open();
var p = new OracleDynamicParameters();
p.Add("V_IN", "123456789874");
p.Add("VO_T1", dbType: DbType.Int32, direction: ParameterDirection.Output, size: 1);
p.Add("VO_T2", dbType: DbType.Varchar2, direction: ParameterDirection.Output, size: 4000);
p.Add("VO_T3", dbType: DbType.Int32, direction: ParameterDirection.Output,size: 1);
p.Add("VO_T4", dbType: DbType.Varchar2, direction: ParameterDirection.Output,size: 50);
p.Add("VO_T5", dbType: DbType.Varchar2, direction: ParameterDirection.Output, size: 50);
var result = connection.Query("WS_PKG.MY_PROCEDURE", p, commandType: CommandType.StoredProcedure);
}
Мы должны добавить переменную размера. Всем спасибо. Я решил этот вопрос.