InvalidOperationException未处理不允许更改' ConnectionString'属性。在C#上

时间:2012-10-18 03:39:47

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

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

On my dbs.cs class

关于班级dbs上的konek功能

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

4 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

尽量减少范围。

答案 3 :(得分:0)

正如例外情况所说,你的“骗局”已经打开了连接。

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

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

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