将[new {CompanyID = 1}]添加到[params object []参数|,]但循环返回Length,LongLength,Rank

时间:2014-02-04 21:09:48

标签: .net loops parameters

我想编写一个通用处理程序,它可以为SQL命令提供任何参数。

我试过这段代码:

DataTable dt = GetDt("Select * from Company where CompanyID = @CompanyID", new { CompanyID = 1 });

调用此函数:

public static DataTable GetDt(string commandText, params object[] parameters)

然后在这个函数中,它循环遍历所有参数:

        var Params = new List<SqlParameter>();

        foreach (var PropInfo in parameters.GetType().GetProperties())
        {
            Params.Add(new SqlParameter(PropInfo.Name, PropInfo.GetValue(parameters, null)));
        }

除了,它没有将PropInfo.Name作为“CompanyID”, 它通过类型列表运行:

[0] Length
[1] LongLength
[2] Rank
[3] Syncroot
[4] IsReadOnly
[5] IsFixedSize
[6] IsSynchronized

我如何在参数列表中循环?

1 个答案:

答案 0 :(得分:1)

您的参数是一个对象数组(object[])所以当您调用GetType().GetProperties()时,您循环遍历数组的属性,而不是对象的属性 in 数组。尝试将参数设置为简单object,如下所示:

public static DataTable GetDt(string commandText, object parameters)
{
    ...
    foreach (var PropInfo in parameters.GetType().GetProperties())
    {
        Params.Add(new SqlParameter(PropInfo.Name, PropInfo.GetValue(parameters, null)));
    }
}