none
ADO.NET не может за раз получить результат селекта и OUTPUT параметры!!! Так ли это..? RRS feed

  • Вопрос

  • Я фигею дорогая редакция! - ADO.NET не может за раз получить результат селекта  и OUTPUT параметры!
     
    Вообщем есть хранимая процедура, которая должна возвращать содержимое файла через селекти его параметры в виде OUTPUT параметров.
    Сама по себе процедура отрабатывает отлично - отдает все и параметры через OUPUT и сам файл через селект, т.е. процедура возвращает всё что надо
    и точно правильная.
     
    А вот ado.net получает только результат результирующего селекта, а вот в output параметрах null-ы! Если в хранимой процедуре убирать результирующий селект, тогда OUTPUT параметры приходят нормально.
    Т.е. и результат селекта и output параметры за раз получить нельзя или я что-то делаю не так? Ниже код:
    using (SqlConnection connection = new SqlConnection(ConnectionString))
       {
        SqlCommand command = new SqlCommand("dbo.GetFileBytes", connection);
    
        command.CommandType = CommandType.StoredProcedure;
    
        command.Parameters.Add(new SqlParameter("@fileId", SqlDbType.BigInt));
        command.Parameters.Add(new SqlParameter("@personId", SqlDbType.BigInt));
        command.Parameters.Add(new SqlParameter("@originalName", SqlDbType.NVarChar, 255));
        command.Parameters.Add(new SqlParameter("@mimeType", SqlDbType.NVarChar, 255));
    
        command.Parameters["@fileId"].Value = fileId;
        command.Parameters["@personId"].Value = personId;
        command.Parameters["@originalName"].Direction = ParameterDirection.Output;
        command.Parameters["@mimeType"].Direction = ParameterDirection.Output;
    
        connection.Open();
    
        SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
    
        fileLength = int.MinValue;
    
        mimeType = Convert.ToString(command.Parameters["@mimeType"].Value);
        originalName = Convert.ToString(command.Parameters["@originalName"].Value);
    
        if(reader.Read())
        {
         content = reader.GetSqlBinary(0).Value;
         fileLength = reader.GetSqlBinary(0).Length;
        }
    
        reader.Close();
       }
    
    В command.Parameters["@mimeType"].Value и command.Parameters["@originalName"].Value приходят null-ы если в ХП-шке есть селект!
    Код самой ХП-шки проверен и работает точно правильно, но если нужно я и его могу выложить...
     

    13 июля 2011 г. 19:53

Ответы

  • Сначала нужно получить результаты select'а, закрыть reader, а после
    этого читать Output параметры, по моему.
     
    • Предложено в качестве ответа Abolmasov Dmitry 14 июля 2011 г. 5:44
    • Помечено в качестве ответа A.G.Sedov 14 июля 2011 г. 11:57
    14 июля 2011 г. 3:43
    Модератор

Все ответы