【问题标题】:InvalidOperationException was unhandled Not allowed to change the 'ConnectionString' property. On C#未处理 InvalidOperationException 不允许更改“ConnectionString”属性。在 C# 上
【发布时间】:2012-10-18 03:39:46
【问题描述】:

虽然语法正确,但我遇到了这种错误,并且遇到了 InvalidOperationExeption。

关于我在类 dbs 上的 konek 函数

public String konek()
{
            connectionString = "Provider=" + OleDBProvider + ";Data Source=" + OleDBDataSource + ";JET OLEDB:Database Password=" + OleDBPassword + ";Persist Security Info=" + PersistSecurityInfo + "";
            return connectionString;
}

【问题讨论】:

  • 最好将代码粘贴到问题内容而不是图像上。

标签: c# winforms ms-access ado.net oledbconnection


【解决方案1】:

您必须创建新的 OleDbConnection 对象,而不是重复使用现有的。

OleDbConnection = new OleDbConnection(db.konek());

另外,长时间保持连接打开不是一个好习惯。 因此,请在操作完成后立即关闭连接。

我相信您的情况,如果您已经创建了具有相同 ConnectionStringOleDbConnection 对象,则无需一次又一次地重新分配相同的连接字符串。

【讨论】:

    【解决方案2】:

    您不允许修改连接字符串属性。试试下面的模板:

    using (OleDbConnection connection = new OleDbConnection(db.konek()))
    {
       try
       {
           connection.Open();
           ....
           ....
       }
       catch (Exception ex)
       {
           ....
       }
    }
    

    【讨论】:

      【解决方案3】:

      也许con 对象已经是Open 导致它是只读的。解决此问题的一种方法是为您的 Connection 对象创建另一个实例。

      using (OleDbConnection con = new OleDbConnection())
      {
          con.ConnectionString = db.konek();
      }
      

      尽可能缩小范围。

      【讨论】:

        【解决方案4】:

        正如例外所说,您的“con”已经打开了连接。

        您可能希望重新使用现有连接或仅在连接未打开时替换:

        if(con.State!=ConnectionState.Open)
        {
        con.ConnectionString = db.Konek();
        }
        

        但是在连接字符串已经有值并且处于打开状态时修改它,表明您的代码逻辑存在一些缺陷。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-11
          • 2011-07-12
          • 1970-01-01
          相关资源
          最近更新 更多