2013-07-07 86 views
0

我需要帮助解决此错误。

这是我使用Access数据库和构建配置平台的错误{"The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception."}'System.Transactions.Diagnostics.DiagnosticTrace'的类型初始值设定项引发异常


是任何CPU。

有时代码运行良好,有时突然抛出此异常。这里有很多类似的问题,但没有一个解决我的错误。

这是我的连接字符串

DbPath = @"d:\Ek.mdb"; 
ConnectionString [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DbPath+";User Id=admin;Password=;"; 

这是我的函数打开连接
我收到错误的Con.Open()

public bool OpenConnection() 
     { 
      if (Con == null) 
      { 
       Con = new OleDbConnection(ConnectionString); 
      } 
      else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open)) 
      { 
       Con.Open(); 
       Tx = Con.BeginTransaction(IsolationLevel.ReadCommitted); 
       return true; 
      } 
      else if (IsConnectionBusy()) 
      { 
       throw new DataException("Connection Busy"); 
      } 
      return false; 
     } 

这我怎么关闭运行后连接查询

public Boolean CloseConnection() 
     { 
      if(IsConnectionBusy()) 
       throw new DataException("Connection Busy"); 
      if (Con.State==ConnectionState.Open) 
      { 
       Tx.Commit(); 
       Con.Close(); 
       return true; 
      } 
      return false; 
     } 
public bool IsConnectionBusy() 
    { 
     switch (Con.State) 
     { 
      case ConnectionState.Connecting: 
      case ConnectionState.Executing: 
      case ConnectionState.Fetching: 
       return true; 
     } 
     return false; 
    } 

我找不到为什么它有时会完美运行,然后有时会抛出此异常。
任何帮助将不胜感激。我为解决这个错误尝试了太多,但不能。

我注意到了这一点。

else if ((Con.State == ConnectionState.Broken || Con.State == ConnectionState.Closed) && (Con.State!=ConnectionState.Open)) 


的连接是closed state。在执行Con.Open()语句时,Connection状态更改为Open,并在此之后引发此错误。
同样在调试时不会引起错误。只有当我没有在该地点放置breakpoint时才会造成这种情况。
Con.Open()当我把一个断点,并在那里停了几秒钟,只有第一次然后没有错误抛出。之后,如果我禁用了断点并且没有错误发生...... !!!

+0

其中MS办公室/ Access版本您使用的? – Rezoan

+0

我正在使用2007年,我创建了数据库2000-2003兼容 – coding

+0

此外,我没有得到错误,如果我把一个断点。只有在没有断点时才会引起错误,并且错误不会始终引起。 – coding

回答

2

更改数据库到sqlite,一切工作非常顺利...
我认为在Access数据库中存在一些交易问题。
它通过更改数据库得到解决。不过我不确定是什么原因导致了这个奇怪的错误。

1

能否请您使用以下二方法来打开和关闭Access数据库连接,并尝试在x86的模式来构建程序,看看问题出现了:

OleDbConnection _oleCon; 
     public Form1() 
     { 
      InitializeComponent(); 
      _oleCon = new OleDbConnection(); 
     } 

     bool OpenConnection() 
     { 
      try 
      { 
       string DbPath = @"D:\Ek.mdb"; 
       _oleCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" + DbPath + ";";//ConfigurationSettings.AppSettings["dbConnectionString"]; 
       _oleCon.Open(); 
       return true; 
      } 
      catch 
      { 
       return false; 
      } 
     } 

     bool CloseConnection() 
     { 
      try 
      { 
       _oleCon.Close(); 
       return true; 
      } 
      catch 
      { 
       return false; 
      } 
     } 
+0

在我使用Access Db的所有以前的项目中,我没有发现任何此类问题。这是我第一次看到这样的行为。 如果我保留一个断点,代码运行的很好,否则会出错。 – coding

+0

我现在不能尝试这段代码,因为我已将所有oledb变量更改为sqlite变量。顺便说一句,谢谢你的代码。我非常感谢你的帮助.. :-) – coding

0

有什么问题我的应用程序。配置文件。

我删除了它,并从一个新项目中添加了一个新项目,并为我修复了它。

0

从app.config中删除空白空间.....其工作正常对我...

1

我建议检查出这个异常的InnerException财产。

我有同样的错误,并且即使我是不寻常的条件下,我认为这仍然是记录的解决方案是有用的。

上下文:简单的控制台应用程序需要通过标准的.NET连接器连接到MySQL(MySql.Data

上下文:在我的app.configconnectionStrings由其configSource属性的装置指向一个外部文件。现在,在.NET中,只有当该文件位于同一目录中或层次结构中较低时,才可以指向外部配置文件,而不是较高。关键是,我的外部文件当然是在层次结构中的较高目录中,所以我选择了另一种方式来读取我感兴趣的连接字符串,并在几天后恢复了该应用程序的工作,但我没有请记住我的app.config已损坏。

这是问题,显然连接器(或其他一些ADO机器)解析了app.config,即使您不以编程方式访问它,因此出现此错误。我能够弄明白,因为我看着InnerException,这就是为什么我建议检查它。

+0

感谢你的回答,我发现我的问题也在配置文件中(前一天玩log4net,如何设置它,没有100%的工作和转移到另一个任务,并无法简单地连接到控制台应用程序中的MySQL数据库)。 – Veverke

0

我更新这似乎解决了这个问题,我连接到本地SQLite数据库我的NuGet包。

相关问题