2015-12-14 9 views
0

Может мне помочь. Я не получаю результат в моем коде? если я использую Dapper.Dapper - Сохраненная процедура oracle не возвращает результат, если больше двух параметров OUT

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); 
     } 

Byt, если я попытаюсь получить результат, используя код руки. Используйте 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); 
    } 

Мы должны добавить переменную размер. Спасибо всем. Я решил этот вопрос.