说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  异常详细信息: System.ArgumentException: 另一个 SqlParameterCollection 中已包含 SqlParameter。源错误:  
行 47: foreach (SqlParameter Pre in PreArray)
行 48: {
行 49: Cmd.Parameters.Add(Pre);
行 50:   
行 51: }
 源文件: e:\jyxt\jyxt\App_Code\TopSql.cs 行: 49  
这个是底层
 //数据库操作函数(PreArray 存储过程参数集合,ProcName 存储过程名称)
  public bool SqlCmd(List<SqlParameter> PreArray, string ProcName)
  {
  SqlCommand Cmd = new SqlCommand();
  Cmd.CommandType = CommandType.StoredProcedure;
  Cmd.Connection = Con;
  Con.Open();  try
  {
  foreach (SqlParameter Pre in PreArray)
  {
  Cmd.Parameters.Add(Pre);
    
  }  Cmd.CommandText = ProcName;
  Cmd.ExecuteNonQuery();
  return true;
  }
  catch (System.Data.SqlClient.SqlException e)
  {
  throw new Exception(e.ToString());  }
  finally
  {
  Cmd.Dispose();
  Con.Close();
      }  }这个是按钮里的事件
t.JYID = this.Label1.Text;
  DataSet ds = t.SelTradingbyJYID();
  ds.Dispose();
  d1.DisputeID = Convert.ToString("ZY".ToString() + this.Label1.Text.ToString());//争议订单编号
  d1.SayID = Request["buy"].ToString();//买家帐号
  d1.JYID = ds.Tables[0].Rows[0]["JYID"].ToString();//订单编号
  d1.Content = this.TextBox1.Text;//买家发言内容
  d1.Addtime = DateTime.Now.ToString();//发言时间
  if (d1.Content != null && d1.Content != "")
  {
  d1.AddDispute11();
  t.JYID = this.Label1.Text;
  t.State = 9;
  t.UpdateState();
  Response.Write("<script>alert('投诉成功,请查看争议详情!');window.location.replace('pindent.aspx')</script>");
  }
  else
  {
  Response.Write("<script>alert('请输入投诉理由!');window.location.replace('ts.aspx?xd_rn=" + t.JYID + "&buy=" + Request["buy"].ToString() + "')</script>");
  }在 d1.AddDispute11();地方出错的下面是这个方法
  public void AddDispute11()
  {
  List<SqlParameter> Arr = new List<SqlParameter>();  SqlParameter Par_DisputeID = new SqlParameter("@DisputeID", SqlDbType.NVarChar,50);//争议订单编号
  Par_DisputeID.Value = Get_DisputeID;
  Arr.Add(Par_DisputeID);  SqlParameter Par_JYID = new SqlParameter("@JYID", SqlDbType.NVarChar,50);//订单编号
  Par_JYID.Value = Get_JYID;
  Arr.Add(Par_JYID);
  SqlParameter Par_Content = new SqlParameter("@Content", SqlDbType.NVarChar, 50);//内容
  Par_Content.Value = Get_Content;
  Arr.Add(Par_Content);
  SqlParameter Par_SayID = new SqlParameter("@SayID", SqlDbType.NVarChar, 50);//发言人帐号
  Par_SayID.Value = Get_SayID;
  Arr.Add(Par_JYID);
  SqlParameter Par_Addtime = new SqlParameter("@Addtime", SqlDbType.DateTime);//发言时间
  Par_Addtime.Value = Get_Addtime;
  Arr.Add(Par_Addtime);  SqlCmd(Arr, "P_AddDispute1");
  }求救,哪里出问题了?之前还不会的 

解决方案 »

  1.   

    Cmd.Parameters.Clear();试试
    foreach (SqlParameter Pre in PreArray)
    {
    Cmd.Parameters.Add(Pre);
     
     }
      

  2.   

    在finally中把Cmd.Parameters.Clear()清空下.
    finally
      {
      Cmd.Parameters.Clear();
      Cmd.Dispose();
      Con.Close();
          }
      

  3.   

    通常都这样写的
    /// <summary>
        /// 执行带参数的增删改SQL语句或存储过程
        /// </summary>
        /// <param name="cmdtxt">增删改SQL语句或存储过程</param>
        /// <param name="paras">参数集合</param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        public static int ExecuteQuery(string cmdtxt, OleDbParameter[] paras, CommandType ct)
        {
            int rows;
            using (OleDbConnection conn = Createconn())
            {
                OleDbCommand cmd = new OleDbCommand(cmdtxt, conn);
                conn.Open();
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                rows = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }
            return rows;
        }
      

  4.   

    楼上发方法都是过了,还是不行
    注释掉的地方都试过了,3个位置都试过了,不行
    //数据库操作函数(PreArray 存储过程参数集合,ProcName 存储过程名称)
        public  bool SqlCmd(List<SqlParameter> PreArray, string ProcName)
        {
            SqlCommand Cmd = new SqlCommand();
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.Connection = Con;
            Con.Open();
            //Cmd.Parameters.Clear();
            try
            {
               // Cmd.Parameters.Clear();
                foreach (SqlParameter Pre in PreArray)
                {
                    Cmd.Parameters.Add(Pre);
                    
                }            Cmd.CommandText = ProcName;
                Cmd.ExecuteNonQuery();
                return true;
            }
            catch (System.Data.SqlClient.SqlException e)
            {
                throw new Exception(e.ToString());        }
            finally
            {
                //Cmd.Parameters.Clear();            Cmd.Dispose();
                Con.Close();
                       }