如何使用SqlDataClient在循环中将值分配给存储过程的参数

乐保聪

我试图使用循环将值从对象params数组传递到存储过程的每个参数,但出现此错误

“过程或函数Proc_GetPaging_Product指定的参数过多。”

问题是cmd.Parameters使用时已经有参数,SqlCommandBuilder.DeriveParameters(cmd)因此无需添加值即可分配。

    public ServiceResult<T> GetPaging<T>(params object[] values)
    {
        var result = new ServiceResult<T>();

        using(_conn)
        {
            _conn.Open();                

            using (SqlCommand cmd = _conn.CreateCommand())
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "[SalesLT].[Proc_GetPaging_Product]";
                SqlCommandBuilder.DeriveParameters(cmd);

                int lengthParams = cmd.Parameters.Count;

                for (int i = 1; i < lengthParams; i++)
                {
                    cmd.Parameters.AddWithValue(cmd.Parameters[i].ParameterName, values[i - 1]);
                }                                             

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var item = Activator.CreateInstance<T>();
                        var properties = typeof(T).GetProperties();

                        foreach (var property in properties)
                        {                               
                            //Type convertTo = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
                            property.SetValue(item, reader[property.Name], null);
                        }

                        result.ListResult.Add(item);
                    }

                    reader.NextResult();
                }
            }
        }

        return result;
    }

我在调试器中遇到错误

Zohar Peled

您要两次添加参数。

在该行中:

SqlCommandBuilder.DeriveParameters(cmd);

并为循环中的每个参数设置一次:

for (int i = 1; i < lengthParams; i++)
{
    cmd.Parameters.AddWithValue(cmd.Parameters[i].ParameterName, values[i - 1]);
}

不用使用AddWithValue,只需做cmd.Parameter[i].Value = values[i]

同样,参数集合与.Net中的任何其他内置集合一样,都是从零开始而不是从一个开始。

您的循环应如下所示:

for (int i = 0; i < lengthParams; i++)
{
    cmd.Parameters[i].Value = values[i];
}

另外,我应该在循环之前添加一个条件,以确保您拥有的值数与存储过程具有的参数数相匹配。

还有一点需要注意:您应该考虑在代码中设置参数,而不要使用DeriveParameters官方文档明确指出:

DeriveParameters需要对数据库的附加调用才能获取信息。如果预先知道参数信息,则通过显式设置信息来填充参数集合会更有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中的for循环中将数组值分配给列表

来自分类Dev

如何在循环中将值分配给2D数组?

来自分类Dev

如何在for-each循环中使用XSLT自动将值分配给属性?

来自分类Dev

6 次迭代后,在 for 循环中将新值分配给 double

来自分类Dev

如何使用循环将值分配给数组

来自分类Dev

如何在FOR循环中将匹配项分配给变量-批处理

来自分类Dev

如何在FOR循环中将匹配项分配给变量-批处理

来自分类Dev

如何在while循环中将行号分配给变量

来自分类Dev

将变量的值存储在另一个变量中,然后在python的循环中将其重新分配给该变量

来自分类Dev

python将值分配给循环中的列表元素

来自分类Dev

R-将值分配给for循环中的列表

来自分类Dev

如何按值将i分配给for循环中的对象?

来自分类Dev

将值分配给数组以在 while 循环中使用

来自分类Dev

如何使用SQL Server存储过程声明要分配给实体的整数范围?

来自分类Dev

在循环中将光栅带分配给变量名称-“无法分配”错误

来自分类Dev

如何在JavaScript中将值从JSON分配给变量

来自分类Dev

为参数 POSTGRESQL 的不同值在循环中调用存储过程

来自分类Dev

无法在 ngFor 循环中分配值:无法分配给对象的只读属性

来自分类Dev

在purrr循环中将数据框的名称分配给ggplot标题

来自分类Dev

在循环中将事件处理程序分配给具有变量的对象

来自分类Dev

使用循环将值分配给变量列表

来自分类Dev

使用循环将值分配给数组的方法

来自分类Dev

如何遍历范围并将值分配给参数

来自分类Dev

如何使用python中的循环将值分配给ndarray变量

来自分类Dev

如何使用循环将值分配给列表的第i个索引?

来自分类Dev

如何使用循环将值分配给 Scala 中的列表列表?

来自分类Dev

在Tensorflow中将值分配给变量

来自分类Dev

Python在while循环中的条件期间将值分配给变量

来自分类Dev

在循环中仅将值分配给某些对象变量

Related 相关文章

  1. 1

    如何在python中的for循环中将数组值分配给列表

  2. 2

    如何在循环中将值分配给2D数组?

  3. 3

    如何在for-each循环中使用XSLT自动将值分配给属性?

  4. 4

    6 次迭代后,在 for 循环中将新值分配给 double

  5. 5

    如何使用循环将值分配给数组

  6. 6

    如何在FOR循环中将匹配项分配给变量-批处理

  7. 7

    如何在FOR循环中将匹配项分配给变量-批处理

  8. 8

    如何在while循环中将行号分配给变量

  9. 9

    将变量的值存储在另一个变量中,然后在python的循环中将其重新分配给该变量

  10. 10

    python将值分配给循环中的列表元素

  11. 11

    R-将值分配给for循环中的列表

  12. 12

    如何按值将i分配给for循环中的对象?

  13. 13

    将值分配给数组以在 while 循环中使用

  14. 14

    如何使用SQL Server存储过程声明要分配给实体的整数范围?

  15. 15

    在循环中将光栅带分配给变量名称-“无法分配”错误

  16. 16

    如何在JavaScript中将值从JSON分配给变量

  17. 17

    为参数 POSTGRESQL 的不同值在循环中调用存储过程

  18. 18

    无法在 ngFor 循环中分配值:无法分配给对象的只读属性

  19. 19

    在purrr循环中将数据框的名称分配给ggplot标题

  20. 20

    在循环中将事件处理程序分配给具有变量的对象

  21. 21

    使用循环将值分配给变量列表

  22. 22

    使用循环将值分配给数组的方法

  23. 23

    如何遍历范围并将值分配给参数

  24. 24

    如何使用python中的循环将值分配给ndarray变量

  25. 25

    如何使用循环将值分配给列表的第i个索引?

  26. 26

    如何使用循环将值分配给 Scala 中的列表列表?

  27. 27

    在Tensorflow中将值分配给变量

  28. 28

    Python在while循环中的条件期间将值分配给变量

  29. 29

    在循环中仅将值分配给某些对象变量

热门标签

归档