如何利用out参数,并通过方法构建SqlParameter数组,难啊!!!!
目的很简单:
构建一个SqlParameter类型的数组,用于给存储过程传入参数
传统做法:
SqlParameter[] param =
{
//第一个SqlParameter,
//第二个SqlParameter,
//...........
};
为了某种目的,必须将构建SqlParameter数组放入一个方法(函数)中执行,利用out类型参数,如下:
protected void Button1_Click(object sender, EventArgs e)
{
SqlParameter[] param = { };
string str = buildSQLQuery(a, out param,);
}
private string buildSQLQuery(string a, out SqlParameter[] param)
{
ArrayList al = new ArrayList();
if(a= " ")
{
al.Add(第一个SqlParameter);
}
else if(a= "1 ")
{
al.Add(第二个SqlParameter);
}
for (int i = 0; i < al.Count; i++)
{
param[i] = (SqlParameter)al[i];
}
return 一个string;
}
执行之后。提示:使用了未赋值的 out 参数“param”
请问大家如何才能正确通过函数给SqlParameter数组赋值
------解决方案--------------------out的参数必须先赋值 new出来
不想的话 可以用ref
不过本身就是引用类型 不用加 out吧
------解决方案--------------------你是说开始不知道大小 进去才能按ARRAYLIST得到大小吧
那就用ref呗
------解决方案--------------------按你的要求,你把Out改成Ref就可以了.
------解决方案--------------------private string buildSQLQuery(string a, out SqlParameter[] param)
改成
private string buildSQLQuery(string a, out SqlParameter[] param)
{
ArrayList al = new ArrayList();
if(a= " ")
{
al.Add(第一个SqlParameter);
}
else if(a= "1 ")
{
al.Add(第二个SqlParameter);
}
SqlParameter[] tmpParams = new SqlParameter[al.Count];
for (int i = 0; i < al.Count; i++)
{
tmpParams[i] = (SqlParameter)al[i];
}
param = tmpParams;
return 一个string;
}
这样我想应该能行
------解决方案--------------------out只是把方法里的值传出,而不会像ref一样直倿在方法体内对变量同地址操作,所以你的方法中直接把out改成ref,如下,其它的都不用改了:
private string buildSQLQuery(string a, ref SqlParameter[] param)
{
...
}
------解决方案--------------------在你的buildSQLQuery方法里的开头添加下面这一行
SqlParameter[] param = new SqlParameter[int型数字];
out的,要先声明。
------解决方案--------------------ref就行