日期:2014-05-17  浏览次数:20788 次

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]);
            }
         &n