2013-07-07 83 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包。

相關問題