正常添加参数是这样 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”。
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”。
Parameters.Add必须接收一个Parameter对象,该对象必须有参数名和参数值。
不然这个参数怎么和sql中的参数对应呢?
sql传参必须指定参数名
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
}
你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Par……
除非有一种办法就是你把参数搞一个数组
string[]pram_value={"@user","@pwd"....}
然后再用循环
for(int i=0;i<parms.Length;i++)
{
cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
}
{
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;
}