正常添加参数是这样            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”。

解决方案 »

  1.   

    你的想法是错误的,
    Parameters.Add必须接收一个Parameter对象,该对象必须有参数名和参数值
    不然这个参数怎么和sql中的参数对应呢?
      

  2.   

    access传参的时候是按照顺序来的
    sql传参必须指定参数名
      

  3.   

    你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
    除非有一种办法就是你把参数搞一个数组
    string[]pram_value={"@user","@@pwd"....}
    然后再用循环
    for(int i=0;i<parms.Length;i++)
                 {
                    cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
                 }
      

  4.   


    你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
    除非有一种办法就是你把参数搞一个数组
    string[]pram_value={"@user","@pwd"....}
    然后再用循环
    for(int i=0;i<parms.Length;i++)
                 {
                    cmd.Par……
      

  5.   

    你这这样用循环来,是方便,但是计算机根本就识别不了这个参数对应的是@user,还是谁?
    除非有一种办法就是你把参数搞一个数组
    string[]pram_value={"@user","@pwd"....}
    然后再用循环
    for(int i=0;i<parms.Length;i++)
                 {
                    cmd.Parameters.AddWithValue(pram_value[i], parms[i]);
                 }
      

  6.   

    找到个办法,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;
            }