c#获取存储过程返回值示例分享


在C#中,获取存储过程的返回值通常涉及到两种类型的返回值:一个是整型(或类似)的返回状态码,另一个是通过输出参数或结果集返回的数据。这里,我将提供一个简单的示例,展示如何调用一个存储过程,并获取它的整型返回值以及通过输出参数获取的数据。

假设我们有一个存储过程`usp_GetEmployeeDetails`,它接受一个员工ID作为输入参数,通过输出参数返回一个员工的状态码,并通过结果集返回员工的详细信息。

首先,是存储过程的SQL定义(这里仅作为示例说明,不直接执行):


CREATE PROCEDURE usp_GetEmployeeDetails
    @EmployeeID INT,
    @StatusCode INT OUTPUT
AS
BEGIN
    -- 假设这里有一些逻辑来检查员工ID,并设置状态码
    SELECT @StatusCode = 1  -- 假设员工存在

    -- 返回员工详细信息(这里仅作示意)
    SELECT * FROM Employees WHERE EmployeeID = @EmployeeID
END

接下来是C#中的调用示例:


using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "你的数据库连接字符串";
        int employeeID = 1; // 假设我们要查询的员工ID为1

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand("usp_GetEmployeeDetails", connection);
            command.CommandType = CommandType.StoredProcedure;

            // 添加输入参数
            SqlParameter employeeIDParam = new SqlParameter();
            employeeIDParam.SqlDbType = SqlDbType.Int;
            employeeIDParam.Direction = ParameterDirection.Input;
            employeeIDParam.Value = employeeID;
            command.Parameters.Add(employeeIDParam);

            // 添加输出参数
            SqlParameter statusCodeParam = new SqlParameter();
            statusCodeParam.SqlDbType = SqlDbType.Int;
            statusCodeParam.Direction = ParameterDirection.Output;
            command.Parameters.Add(statusCodeParam);

            try
            {
                connection.Open();
                command.ExecuteNonQuery(); // 执行存储过程

                // 获取输出参数的值
                int statusCode = (int)statusCodeParam.Value;
                Console.WriteLine($"Status Code: {statusCode}");

                // 如果需要获取结果集(这里未展示如何读取结果集,因为示例聚焦于返回值)
                // 你可以使用SqlDataReader来读取command.ExecuteReader()返回的结果
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred: {ex.Message}");
            }
        }
    }
}

请注意,上述代码示例中并未展示如何读取存储过程返回的结果集,因为示例的重点在于展示如何获取存储过程的整型返回值和输出参数。如果你需要读取结果集,可以使用`SqlDataReader`对象来执行`command.ExecuteReader()`方法并遍历结果。