请看下面的代码:
/// <summary>
        /// (添加新闻)添加数据
        /// </summary>
        /// <returns></returns>
        public bool AddNewsData_V()
        {
            StrSql = "Insert Into [WIN_NEWS_ARTICLE_V] ([WIN_ARTICLE_ID],[WIN_ARTICLE_TYPE],[WIN_ARTICLE_IMGS],[WIN_ARTICLE_TITLE],[WIN_ARTICLE_DATE],[WIN_ARTICLE_NAVI],[WIN_ARTICLE_ASCID])Values(@NewsId,@NewsType,@NewsImgs,@NewsTitle,@NewsDate,@NewsNavi,@NewsAsc)";
            Newsid = new SqlParameter("@NewsId", SqlDbType.NVarChar, 36);
            Newsid.Value = Convert.ToString(newsid);
            Newstype = new SqlParameter("@NewsType", SqlDbType.Int);
            Newstype.Value = Convert.ToInt32(newstype);
            Newsimgs = new SqlParameter("@NewsImgs", SqlDbType.NVarChar, 255);
            Newsimgs.Value = Convert.ToString(newsimgs);
            Newstitle = new SqlParameter("@NewsTitle", SqlDbType.NVarChar, 255);
            Newstitle.Value = Convert.ToString(newstitle);
            Newsdate = new SqlParameter("@NewsDate", SqlDbType.DateTime);
            Newsdate.Value = Convert.ToDateTime(newsdate);
            Newsnavi = new SqlParameter("@NewsNavi", SqlDbType.NVarChar);
            Newsnavi.Value = Convert.ToString(newsnavi);
            Newsasc = new SqlParameter("@NewsAsc", SqlDbType.Int);
            Newsasc.Value = Convert.ToInt32(newsasc);
            SqlParameter[] ArryPars ={ Newsid, Newstype, Newsimg, Newstitle, Newsdate, Newsnavi, Newsasc };
            return db.ExecuteData(StrSql, ArryPars);
        }        public bool AddTags()
        {
            跟上面差不多.......
            SqlParameter[] ArryPars ={ Tagsid, Tagsname };
            return db.ExecuteData(StrSql, ArryPars);
        }        /// <summary>
        /// 运行SQL语句返回True/False
        /// </summary>
        /// <param name="SQL"></param>
        public bool ExecuteData(string StrSql, SqlParameter[] ArryPars)
        {
            SqlConn = GetConn();
            Command = new SqlCommand(StrSql, SqlConn);
            if (ArryPars.Length > 0)
            {
                for (int i = 0; i < ArryPars.Length; i++)
                {
                    Command.Parameters.Add(ArryPars[i]);
                }
            }
            try
            {
                if (Command.ExecuteNonQuery() > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
            Command.Parameters.Clear();
            Dispose(SqlConn);
        }
调用:if(AddNewsData_V())
{
if(AddTags())
{
response.write("添加成功");
}
else
{response.write("添加失败");}
response.write("添加成功");
}
else
{
response.write("添加失败");
}
运行的时候 AddNewsData_V()能够成功运行并添加数据,但是接下来AddTags()就不能成功运行并弹出错误
另一个 SqlParameterCollection 中已包含 SqlParameter。请问怎样修改

解决方案 »

  1.   

    以前遇到过:每次使用一次sqlcommand,必须显示清除该sqlcommand所包含的参数与链接
    这就是这个问题的解决方法。另外本人比较笨,想问楼主一个问题
    treturn db.ExecuteData(StrSql, ArryPars);
    his.bind(); 这个db.[color=#FFF0000]这个是什么用法,能说下吗?还没遇到过这个用法.
    谢谢
      

  2.   


    public bool ExecuteData(string StrSql, SqlParameter[] ArryPars)
            {
                SqlConn = GetConn();
                Command = new SqlCommand(StrSql, SqlConn);
                if (ArryPars.Length > 0)
                {
                    for (int i = 0; i < ArryPars.Length; i++)
                    {
                        Command.Parameters.Add(ArryPars[i]);
                    }
                }
                try
                {
                    if (Command.ExecuteNonQuery() > 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch
                {
                    return false;
                }
                Command.Parameters.Clear();
                ArryPars = null;//加上这句试试
                Dispose(SqlConn);
            }
      

  3.   

    public bool ExecuteData(string StrSql, SqlParameter[] ArryPars)
    {
        SqlConn = GetConn();
        Command = new SqlCommand(StrSql, SqlConn);
        if (ArryPars.Length > 0)
        {
            for (int i = 0; i < ArryPars.Length; i++)
            {
                Command.Parameters.Add(ArryPars[i]);
            }
        }
        try
        {
            if (Command.ExecuteNonQuery() > 0)
            {
                //这里如果成功,会直接return ,从而参数无法清除
                return true;
            }
            else
            {
                //同理
                return false;
            }
        }
        catch
        {
            // 同理
            return false;
        }
        finally
        {
            //加finally块试一下
            Command.Parameters.Clear();
            Dispose(SqlConn);
        }
    }
      

  4.   


    或者在方法里面添加一个bool 类型的变量 flag
    if (Command.ExecuteNonQuery() > 0)
            {
                //这里如果成功,会直接return ,从而参数无法清除
                flag=true;
            }
            else
            {
                //同理
                flag=false;
            }Command.Parameters.Clear();
                Dispose(SqlConn);
    return flag;我经常是这样用!