【问题标题】: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());
另外,长时间保持连接打开不是一个好习惯。
因此,请在操作完成后立即关闭连接。
我相信您的情况,如果您已经创建了具有相同 ConnectionString 的 OleDbConnection 对象,则无需一次又一次地重新分配相同的连接字符串。
【解决方案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();
}
但是在连接字符串已经有值并且处于打开状态时修改它,表明您的代码逻辑存在一些缺陷。