自己在用时发现,如果定义的是SqlParameter[],那么参数名称和数量得是固定的,如果传入的参数和参数值都是动态的(比如IList<KeyValuePair<string,string>> data),我都是用List<SqlParameter>来添加的,比如下面的代码
int i = 0; foreach (KeyValuePair<string, string> kvp in data) { i++; para.Add(new SqlParameter("@YsKinds" + i.ToString(), kvp.Key.ToString())); para.Add(new SqlParameter("@bzr" + i.ToString(), kvp.Value.ToString())); sql += string.Format(" select @bianhao,@YsKinds{0},@bzr{0},@category ,@SerialNumber,@Tempkinds Union ALL", i.ToString()); }
不知道各位高手是如何做的?
可能你们没注意,如果构造SqlCommand的是SqlParameter[],而BLL中用的是List<sqlparameter>,BLL就必须para.toarray(),如果构造SqlCommand本身就是List,则无须转换?
params SqlParameter[] parms
没啥区别,都要build为一个sql string
原则上只要是一个array类型都是可以的。
而我一般因为类型的问题会使用List<Dictionary<string,string>>
这个无所谓,都行
List吧,方便
首先:数组是静态内存分配,需要预先分配存储空间。性能要比list好,但不灵活。
如果你可以预先知道参数的数量,就用SqlParameter[]。
List是动态内存分配,性能比数组要差些,但灵活。
看实际情况来选择。
IEnumable<>
如果是是基于具体的是想,用可变参数吧params SqlParameter[] parms,这样不管你参数有多少都可以,如果封装通用的SQL操作类,那么用List<SqlParameter>,取到参数列表再转换成数组