【问题标题】:Sending output parameters and getting multiple datasets from Stored procedure C#发送输出参数并从存储过程 C# 获取多个数据集
【发布时间】:2015-01-14 01:26:46
【问题描述】:

我的存储过程:-

DECLARE @return_value int,
        @Sum int,
        @Total float

EXEC    @return_value = [dbo].[mysamplesp]
        @sd = '2014-09-23 00:00:00.000',
        @ed = '2014-09-30 00:00:00.000',
        @ID = '40494',
        @sp = NULL,
        @Ct = NULL,
        @GD = NULL,
        @Sum = @Sum OUTPUT,
        @Total = @Total OUTPUT

SELECT  @Sum as N'@Sum',
        @Total as N'@Total'

SELECT  'Return Value' = @return_value

执行结果;-

数据集1-

col1    col2    col3    col4    col5

datase2-

@Sum    @Total 

数据集 3-

return_value

我的 C# 实现:-

Dictionary<string, object> storage = new Dictionary<string, object>();
                storage.Add("sd", "2014-09-23 00:00:00.000");
                storage.Add("ed", "2014-09-30 00:00:00.000");
                storage.Add("ID", "40494");
                storage.Add("Sp", null);
                storage.Add("Ct", null);
                storage.Add("GD", null);
                storage.Add("Sum", null);
                storage.Add("Total", null );

 var spReturn = new Data(Data.DBKEY).ExecuteSotredProcedure("mysamplesp", storage);

。 . .

 public int ExecuteSotredProcedure(string qryName, Dictionary<string, object> parameters)
            {
                using (SqlConnection con = new SqlConnection(_conStr))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand(qryName, con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        foreach (var key in parameters.Keys)
                        {
                            cmd.Parameters.AddWithValue(key, parameters[key] ?? DBNull.Value);
                        }
                        return cmd.ExecuteNonQuery();
                    }
                }
            }

Q1:如何使用 C# 中的字典将输出参数发送到 Sp?可能吗?

Q2:如何从 SP 中获取多个数据集?

【问题讨论】:

    标签: c# sql-server stored-procedures sqlcommand executenonquery


    【解决方案1】:

    对于Q1,你应该指定sql参数directionParameterDirection.Output

    对于第二季度,请使用SqlDataReader

    var cmd = sqlConnection.CreateCommand();
    cmd.CommandText = "[dbo].[mysamplesp]";
    cmd.CommandType = CommandType.StoredProcedure;
    sqlConnection.Open();
    var reader = cmd.ExecuteReader();
    // process first dataset
    reader.NextResult();
    // process second dataset
    // etc
    

    【讨论】:

    • 我添加了如下代码 - cmd.Parameters["Sum"].Direction = ParameterDirection.Output; cmd.Parameters["Total"].Direction = ParameterDirection.Output; 但是在 `var reader = cmd.ExecuteReader();` 上得到 String[6]: the Size property has an invalid size of 0. 错误;`
    • 尝试设置您的输出参数的Size 属性,例如:cmd.Parameters["Sum"].Size = 5。参考this link
    • 但无法从 SP 获取第二个数据集。阅读器仅显示一个(一组 4 列)。甚至 reader.NextResult() 无法找到它..
    • 你能提供完整的代码来说明你是如何执行这个过程的吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多