我想编写一个通用处理程序,它可以为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
我如何在参数列表中循环?
答案 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)));
}
}