我的程序时设计了三个模块 分别实现不同级别的操作
DataCommandOfNews类用来对数据库进行增删操作  下面是代码
private CNews mynews;
    private SqlConnection mydataconnetion = new SqlConnection();
    public DataCommandOfNews(CNews news)
    {
        this.mynews = news;
    }
    public string myconstr
    {
        get { return myconstr; }
        set { myconstr = value; }
    }
    //添加新闻
    public void AddNews(string editor)
    {
        mydataconnetion.ConnectionString = myconstr;
        mydataconnetion.Open();
        string AddNewsStr = "insert into news (news_author,news_class,news_title,news_subtitle,news_content,news_date,news_editor,news_iscritical) values (@author,@class,@title,@subtitle,@content,@date,@editor,@iscritical)";
        SqlCommand AddNewsCom = new SqlCommand(AddNewsStr, mydataconnetion);
        AddNewsCom.Parameters.AddWithValue("@author", mynews.Nauthor);
        AddNewsCom.Parameters.AddWithValue("@class", mynews.Nclass);
        AddNewsCom.Parameters.AddWithValue("@title", mynews.Ntitle);
        AddNewsCom.Parameters.AddWithValue("@subtitle", mynews.Nsubtitle);
        AddNewsCom.Parameters.AddWithValue("@content", mynews.Ncontent);
        AddNewsCom.Parameters.AddWithValue("@date", mynews.Ndatetime);
        AddNewsCom.Parameters.AddWithValue("@editor", editor);
        AddNewsCom.Parameters.AddWithValue("@iscritical", mynews.Niscritical);
        AddNewsCom.ExecuteNonQuery();
        mydataconnetion.Close();
    }
Admin类用来调用DataCommandOfNews类中的一些方法 下面是代码
private string admin_name;
    private int admin_role;
    private int admin_id;
 public admin(string name,int role,int id)
 {
        this.admin_name = name;
        this.admin_role = role;
        this.admin_id = id;
 }
    public int _id
    {
        get { return _id; }
        set { _id = admin_id; }
    }
    public string _name
    {
        get { return _name; }
        set { _name = admin_name; }
    }
    public int _role
    {
        get { return _role; }
        set { _role = admin_role; }
    }
    public string _lastlogin
    {
        get { return _lastlogin; }
        set { _lastlogin = value; }
    }
    public string _regtime
    {
        get { return _regtime; }
        set { _regtime = value; }
    }
    //添加新闻 
    public void AddNews(CNews mynews)
    {
        DataCommandOfNews AddNewsCom = new DataCommandOfNews(mynews);
        AddNewsCom.myconstr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["studyConnectionString"].ToString();
        AddNewsCom.AddNews(admin_name);
        Response.Write("<script>alert('添加成功!')</script>");
    }
在主程序中 一开始新建连接自定义了一个函数
private void Bind()
    {
        string MyConStr;
        MyConStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["studyConnectionString"].ToString();
        mydatacon.ConnectionString = MyConStr;//错误提示在这行 C#中不允许更改“ConnectionString”属性,连接的当前状态为打开。
        mydatacon.Open();
    }
建立admin对象
private admin adminbuild()
    {
            Bind();
            string MyCmdStr = "select * from admininfo where admin_username=@name";
            SqlCommand MyCmd = new SqlCommand(MyCmdStr, mydatacon);
            MyCmd.Parameters.AddWithValue("@name", Session["username"].ToString());
            SqlDataReader MyDr = MyCmd.ExecuteReader();
            MyDr.Read();
            int iRole = int.Parse(MyDr["admin_role"].ToString());
            int iID = int.Parse(MyDr["admin_id"].ToString());
            string strName = Session["username"].ToString();
            admin myadmin = new admin(strName, iRole, iID);
            mydatacon.Close();
            return myadmin;
    }
在添加新闻时
protected void BTNconfirm_Click(object sender, EventArgs e)
    {
        Bind();
        if (NewsChildClass.SelectedItem != null)
        {
            string MyComStr;
            MyComStr = "select class_id from class where class_name=@name";
            SqlCommand MyCmd = new SqlCommand(MyComStr, mydatacon);
            MyCmd.Parameters.AddWithValue("@name", NewsChildClass.SelectedItem.ToString());
            SqlDataReader MyDr = MyCmd.ExecuteReader();
            MyDr.Read();
            //此时ClassID可以用作最后上传新闻时的标识
            ClassID = int.Parse(MyDr["class_id"].ToString());
        }
               if (Session["username"] != null)
        {
 //构造一个admin对象 实现对新闻的添加操作
            admin MyAdmin = adminbuild();
            //取出各控件中的值 为CNews类的实例化提供参数
            string Ntitle = TBnewstitle.Text;        //新闻标题
            string Nsubtitle = TBnewssubtitle.Text;  //新闻副标题
            string Nautuor = TBnewsauthotr.Text;     //新闻作者
            string Neditor = MyAdmin._name;          //新闻编辑
            string Ndatet = DateTime.Now.ToString(); //新闻提交日期
            string Ncontent = NewsContent.Value;     //新闻内容
            int iscritical;
            if (CBiscritical.Checked)
            {
                iscritical = 0;
            }
            else
            {
                iscritical = 1;
            }
            //实例化一个新闻对象
            CNews news = new CNews(Ntitle, Nsubtitle, Ndatet, Neditor, Nautuor, Ncontent, ClassID, iscritical);
            MyAdmin.AddNews(news,mydatacon);
            mydatacon.Close();
        }
        else
        {
            Response.Redirect("login.aspx");
        }
    }
每一次运行的时候都会说“C#中不允许更改“ConnectionString”属性 ”我很奇怪我都已经把连接关上了怎么还会说不允许更改ConnectionString属性,何况添加新闻的过程中我根本没有去动这个属性啊 在自定义的类里面都是在类里面自己产生一个sqlconnection 难道说同时只允许一个sqlconnection存在?恳请大侠指教!!!我为这段东西查了一下午资料了~~~~

解决方案 »

  1.   

    if (NewsChildClass.SelectedItem != null)  
            else
            {
                Response.Redirect("login.aspx");
    这里面没有关闭连接
            } 
      

  2.   

    只有在连接关闭时才能设置 ConnectionString 属性
    象connection.Open(),Close()这样的东西要如下调用,确保关闭
    try
    {
     connection.Open();
    ///
    }
    Catch(ArgumentException)
    {
     MessageBox.Show("ConnectionString错误");
     ///
    }
    finally
    {
     if(connection.State==Connection.Open)
         connection.Close();
    }
      

  3.   

    又检查了一下 连接都已经关了现在 可是仍然是这个错误 问题是我根本就没有去动过这个属性啊 对数据库的增删操作我都使用DataCommandOfNews这个类来完成 他里面有自己的sqlconnection 啊~