c# - 从 C# 中的存储过程返回多个值

标签 c# sql-server stored-procedures

我需要从应用程序中的存储过程返回 2 个值。下面是我的应用程序中的代码片段。我需要在各自的插入语句之后获取下面的 SureveyID 和 InputID 的值。

        int surveyId = 0;
        int inputId = 0;    
        SqlDataManager manager = new SqlDataManager();
        manager.AddParameter("@Name", surveyInstance.SurveyName);
        manager.AddParameter("@Type", surveyInstance.SurveyType);
        manager.AddParameter("@UserId", surveyInstance.UserId);
        manager.AddParameter("@InputType", surveyInstance.InputType);
        manager.AddParameter("@DisplayName", surveyInstance.DisplayName);
        manager.AddOutputParameter("@SurveyID",System.Data.DbType.Int32,surveyId);
        manager.AddOutputParameter("@InputID", System.Data.DbType.Int32,inputId);
        manager.ExecuteNonQuery("pr_CreateSurvey");

AddParameter 和 AddOutputParameter 是自定义方法,如下所示

 public void AddParameter(string parameterName, DbType parameterType, object        parameterValue)
    {
        SqlParameter parameter = new SqlParameter();
        parameter.ParameterName = parameterName;
        parameter.DbType = parameterType;
        parameter.Value = parameterValue;
        parameters.Add(parameter);
    }

public void AddOutputParameter(string parameterName, DbType parameterType, object parameterValue)
        {
            SqlParameter parameter = new SqlParameter();
            parameter.ParameterName = parameterName;
            parameter.DbType = parameterType;
            parameter.Value = parameterValue;
            parameter.Direction = ParameterDirection.Output;
            parameters.Add(parameter);
        }

下面是存储过程的代码片段

ALTER PROCEDURE [dbo].[pr_CreateSurvey] 
    -- Add the parameters for the stored procedure here
    @Name varchar(50),@Type varchar(50),@UserId varchar(50),@InputType varchar(50),@DisplayName varchar(50),
    @SurveyID int OUTPUT,@InputID int OUTPUT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    Insert into surveys(name,user_id,display_name,type) values(@Name,@UserId,@DisplayName,@Type)
    SET @SurveyID = SCOPE_IDENTITY()
    Insert into input_types(name) values (@InputType)
    SET @InputID = SCOPE_IDENTITY()
END

插入语句工作正常,但我没有在我的应用程序中取回任何值。其 0。 我尝试使用下面的语句返回 1 个值(SurveyID),但仍然没有获得正确的值。每次都会返回-1。

surveyId = manager.ExecuteNonQuery("pr_CreateSurvey");

我尝试了很多,但没有成功。请指教。

最佳答案

在 SqlCommand 的参数集合中查找输出参数的值...例如

mySqlCommand.Parameters["@SurveyID"].Value

执行后

mySqlCommand.ExecuteNonQuery();

关于c# - 从 C# 中的存储过程返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417570/

相关文章:

c# - 帮助处理 excel 文件的 OleDB 连接字符串

sql-server - 当 SQL 表不是一对一时,如何计算准时交货

c# - 安排重新启动的最佳方法是什么?

c# - 如果一个测试用例在通过 VSTS 运行相关测试时失败,则整个测试套件将失败

SQL 根据当前日期减去两天选择记录

stored-procedures - 何时编写长存储过程

sql - select * 是否影响存储过程性能?

mysql - 存储过程语法错误

c# - 如何使 double 正常工作? C#

sql-server - TSQL查询数据库实例在线