求救!!请帮忙.存储过程如下:
ALTER PROCEDURE dbo.selectwherelasterday (
@value1 datetime,
@value2 datetime
)ASselect servername,serverip,serviceqq,opentime,linetype,version,website,tuijian
 from serverids where endtime>getdate() and (opentime between @value1 and @value2)  order by addtime DESC 
RETURN 
出错提示:一个 SqlParameterCollection 已包含带有 ParameterName“@value1”的 SqlParameter。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentException: 另一个 SqlParameterCollection 已包含带有 ParameterName“@value1”的 SqlParameter。源错误: 
行 58: 
行 59:  foreach(SqlParameter sp in parameters)
行 60:  {sqlcmd.Parameters.Add(sp);}
行 61:  SqlDataAdapter dapubs=new SqlDataAdapter();
行 62:  dapubs.SelectCommand=sqlcmd;
 相关方法:
public DataSet returnds(string selectstr,SqlParameter[] parameters)
{

SqlConnection sqlcon=new SqlConnection(sqlconstr);
SqlCommand sqlcmd=new SqlCommand(selectstr,sqlcon);
sqlcmd.CommandType=CommandType.StoredProcedure; foreach(SqlParameter sp in parameters)
{sqlcmd.Parameters.Add(sp);}
SqlDataAdapter dapubs=new SqlDataAdapter();
dapubs.SelectCommand=sqlcmd;
DataSet ds=new DataSet();
dapubs.Fill(ds);
return ds;
}aspx文件代码:public void  datagridbind()
{
mymethod methodgetds=new mymethod();

taohuang.DataSource=methodgetds.returnds("selectwheretaohuang").Tables[0].DefaultView;
taohuang.DataBind();


zongheds.DataSource=methodgetds.returnds("selectwhereputong").Tables[0].DefaultView;
zongheds.DataBind();

DateTime dt=new DateTime();
dt=Convert.ToDateTime(DateTime.Now.ToShortDateString()); SqlParameter[] sps={
   new SqlParameter("@value1",SqlDbType.DateTime,20),
new SqlParameter("@value2",SqlDbType.DateTime,20)
   };
sps[0].Value=dt.ToShortDateString();
sps[1].Value=dt.AddDays(1).ToShortDateString();

today.DataSource=methodgetds.returnds("selectwherelasterday",sps).Tables[0].DefaultView;
today.DataBind();
sps[0].Value=dt.AddDays(-5).ToShortDateString();
dt=Convert.ToDateTime(DateTime.Now);
sps[1].Value=dt.ToShortDateString();
Response.Write(dt.ToString());
            lasterday.DataSource=methodgetds.returnds("selectwherelasterday",sps).Tables[0].DefaultView;
lasterday.DataBind();
sps[0].Value=dt.AddDays(1).ToShortDateString();
sps[1].Value=dt.AddDays(4).ToShortDateString();
weilai.DataSource=methodgetds.returnds("selectwherelasterday",sps).Tables[0].DefaultView;
weilai.DataBind();
}怎么回事呢,很怪的问题/.

解决方案 »

  1.   

    应该是
    CREATE PROCEDURE
    不是
    ALTER PROCEDURE
      

  2.   

    试试看把
    sqlcmd.Parameters.Add(sp);改成if (!(sqlcmd.Parameters.Contains("@value1") || sqlcmd.Parameters.Contains("@value2")))
    {
    sqlcmd.Parameters.Add(sp);
    }
      

  3.   

    在 sqlcmd.Parameters.Add 之前试一下sqlcmd.Parameters.Clear看看对不对
      

  4.   

    public DataSet returnds(string selectstr,SqlParameter[] parameters)
    {

    SqlConnection sqlcon=new SqlConnection(sqlconstr);
    SqlCommand sqlcmd=new SqlCommand(selectstr,sqlcon);
    sqlcmd.CommandType=CommandType.StoredProcedure;
    sqlcmd.Parameters.Clear(); foreach(SqlParameter sp in parameters)
    {sqlcmd.Parameters.Add(sp);}
    SqlDataAdapter dapubs=new SqlDataAdapter();
    dapubs.SelectCommand=sqlcmd;
    DataSet ds=new DataSet();
    dapubs.Fill(ds);
    return ds;
    }是这样吧?我ADD前CLEAR了还是不行的啊.
      

  5.   

    怀疑你的参数SqlParameter[] parameters中有重名的
      

  6.   

    怀疑你的参数SqlParameter[] parameters中有重名的是的啊.因为要返回3个dataset,其中用到的存储过程是一样的,当然parameters都一样了.
    只是参数不同.高手帮忙啊,急!!!
      

  7.   

    嗯,跟我的问题差不多:http://community.csdn.net/Expert/topic/4694/4694445.xml?temp=.2279779
      

  8.   

    你在
    public DataSet returnds(string selectstr,SqlParameter[] parameters)
    中操作完后,释放一下资源,把command以及dataadapter都释放了,看是否可以。
      

  9.   

    foreach(SqlParameter sp in parameters)
    {
      if(!sqlcmd.Parameters.Contains(sp.ParameterName))//添加前判断一下就行了
      {
         sqlcmd.Parameters.Add(sp);
      }
    }