Извлечение возвращаемого значения из процедуры в C#

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для работы с хранимой процедурой в C# и извлечения её возвращаемого значения следует использовать объект SqlCommand. Требуется установить его свойству CommandType значение StoredProcedure и использовать SqlParameter для приема возвращаемого значения. Пример:

csharp
Скопировать код
using (var conn = new SqlConnection("your_connection_string"))
{
    conn.Open();
    using (var cmd = new SqlCommand("your_stored_procedure_name", conn) { CommandType = CommandType.StoredProcedure })
    {
        var retValParam = cmd.Parameters.Add("@Return", SqlDbType.Int) { Direction = ParameterDirection.ReturnValue };
        cmd.ExecuteNonQuery();
        // Тут магия
        int returnValue = (int)retValParam.Value; 
    }
}

Не забудьте подставить вместо "your_connection_string" и "your_stored_procedure_name" соответствующие значения. После выполнения ExecuteNonQuery переменная returnValue содержат возвращаемое значение.

Кинга Идем в IT: пошаговый план для смены профессии

Укрепляем код: лучшие практики

Объект команды

Настройте объект SqlCommand таким образом, чтобы корректно работать с хранимыми процедурами. Для свойства CommandType задайте значение CommandType.StoredProcedure.

Типы данных

Обеспечьте соответствие типов данных, чтобы исключить ошибки преобразования и убедитесь, что типы данных SqlParameter совпадают с ожидаемыми типами хранимой процедуры.

Обработка ошибок

Используйте блок try-catch для перехвата ошибок и обеспечения стабильности приложения.

Работа со сложными типами

Для хранимых процедур, которые возвращают сложные типы или строковые значения, рекомендуется использовать выходные параметры OUTPUT. Важно чётко отличать возвращаемые значения от выходных параметров.

Навигация по сложным случаям

Приманка SELECT

Не сводите SELECT к RETURN, они не взаимозаменяемы и могут вызвать путаницу, особенно если SELECT используется для возврата значения. Бля получения возвращаемого значения опиритесь на значения параметров.

Ловушка приведения типов!

Внимательно подходите к приведению типов, чтобы не столкнуться с ошибкой из-за некорректного преобразования.

Загадка имени параметра

Обязательно проверьте соответствие имен параметров в вашем коде на C# и в определении хранимой процедуры, чтобы избежать ошибки ArgumentException или критического сбоя программы.

Выбор правильного выполнения команды

В зависимости от типа хранимой процедуры, выберите между ExecuteNonQuery, ExecuteScalar и ExecuteReader.

Визуализация

Представим, что C# — это абонент (📞), а SQL хранимая процедура — оператор (👩‍💼):

Markdown
Скопировать код
C# 📞: "Здравствуйте, мне нужен результат."
SQL 👩‍💼: "Хорошо, я извлеку его из хранилища процедур."

Хранимая процедура эффективно обслуживает запрос и передаёт результат оператору (👩‍💼):

Markdown
Скопировать код
SQL 👩‍💼➡️📜: "У вас результат!"
C# 📞👂: "Отлично, спасибо вам!"

В этом диалоге ключевым является возвращаемое значение, которое оператор (👩‍💼) преобразует обратно абоненту (📞):

Markdown
Скопировать код
👩‍💼 ➡️ 📜 ➡️ 📞

Именно таким образом происходит взаимодействие между C# и SQL хранимыми процедурами.

Полезные материалы

  1. Класс SqlCommand (System.Data.SqlClient) | Microsoft Learn
  2. Класс SqlParameter (System.Data.SqlClient) | Microsoft Learn
  3. Вызов хранимой процедуры в ADO.NET – CodeProject
  4. C# Corner – Использование хранимых процедур и объекта команды в ADO.NET
  5. Хранимые процедуры Entity Framework – Узнайте, как использовать хранимые процедуры в LINQ