读书人

SqlParameter增添参数能否不指定param

发布时间: 2012-12-15 15:16:03 作者: rapoo

SqlParameter添加参数能否不指定parameterName,按顺序依次添加参数
正常添加参数是这样


cmd.Parameters.AddWithValue("@user", parms[0]);
cmd.Parameters.AddWithValue("@pwd", parms[1]);
cmd.Parameters.AddWithValue("@flag", parms[2]);

因为参数很多,如果类似这样添加应该会很方便

for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.Add(parms[i]);
}

但是这样做会报错的。SqlParameterCollection 只接受非空的 SqlParameter 类型对象,不接受 String 对象。
我将parms[i],做强制转换也不行
          
for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.Add((SqlParameter)parms[i]);
}

会报错。无法将类型为“System.String”的对象强制转换为类型“System.Data.SqlClient.SqlParameter”。

[最优解释]
你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
}
[其他解释]
不能。必须指定参数名称。
[其他解释]
找到个办法,OleDbCommand 添加参数可以不输入参数名,按顺序依次对应添加就好了,我做了一个方法,可以不定参数个数,添加参数,参数名用空值替代即可,方便多了。

public int Ole_Proc_unknow_parms_count(string Proc_Name, OleDbConnection con, int RES, params object[] parms)
{
OleDbCommand cmd = new OleDbCommand(Proc_Name, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@RES", RES);
cmd.Parameters["@RES"].Direction = ParameterDirection.Output;
for (int i = 0; i < parms.Length; i++)
{
cmd.Parameters.AddWithValue("", parms[i]);
}
con.Open();


cmd.ExecuteNonQuery();
RES = (int)cmd.Parameters["@RES"].Value;
con.Close();
return RES;
}


[其他解释]

你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Par……
[其他解释]
你的想法是错误的,
Parameters.Add必须接收一个Parameter对象,该对象必须有参数名和参数值。
不然这个参数怎么和sql中的参数对应呢?
[其他解释]
access传参的时候是按照顺序来的
sql传参必须指定参数名
[其他解释]
你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
}
[其他解释]
null

读书人网 >C#

热点推荐