2015-06-22 87 views
12

我正在開發一個簡化日誌記錄的小應用程序,它通過OleDB爲MS Access數據庫添加了一些輸入。在OleDb連接打開時發生SEHException

let private conn = new OleDbConnection(connectionString) 

let private submitCmd date wins = 
    let cmd = new OleDbCommand("INSERT INTO ArenaStats ([Date], [Wins]) VALUES (@Date, @Wins)", 
           Connection = conn, CommandType = CommandType.Text) 
    ["@Date", box date; "@Wins", box wins] 
    |> List.iter (cmd.Parameters.AddWithValue >> ignore) 
    cmd 


let private submit date wins = 
    try 
     conn.Open() 
     (submitCmd date wins).ExecuteNonQuery() |> ignore 
    finally 
     conn.Close() 

[<CompiledName "AddEntry">] 
let addEntry(date:DateTime, wins:int) = 
    submit date wins 

現在通過測試FSI這只是按預期工作。但是,當我從C#WPF項目中使用此API時,它將拋出SEHExceptionconn.Open()。我真的在摸索爲什麼會發生這種情況。

編輯

至於建議,我也試圖單純實現相同的代碼在C#中,並在同一個項目,它會拋出同樣的異常,在同一個地方,但我張貼下面的代碼參考。

class MsAccessDatabase : IArenaWinsDatabase { 
     private OleDbConnection connection = new OleDbConnection(connectionString); 

     private OleDbCommand SubmitCommand(DateTime date, int wins) { 
      return new OleDbCommand("INSERT INTO ArenaStats ([Date], [Wins]) VALUES (@Date, @Wins)") { 
       Connection = connection, 
       CommandType = System.Data.CommandType.Text, 
       Parameters = { 
        new OleDbParameter("@Date", date), 
        new OleDbParameter("@Wins", wins) 
       } 
      }; 
     } 

     public void Submit(DateTime date, int wins) { 
      try { 
       connection.Open(); 
       SubmitCommand(date, wins).ExecuteNonQuery(); 
      } 
      finally { 
       connection.Close(); 
      } 
     } 
    } 
+0

你有沒有嘗試用你的WPF中的等效C#代碼替換它?項目,看看錯誤是否仍然存在? – AlexFoxGill

+0

例外情況如何? –

+0

@FyodorSoikin''外部組件拋出一個異常.'' –

回答

9

在菲利普的幫助下,我弄明白了。看起來,默認情況下,FSI被配置爲默認運行在64位,而WPF項目設置爲「優先32位」。將WPF項目的目標平臺更改爲64位解決了問題。

1

當試圖運行下面的代碼:

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", FilePath); 
OleDbConnection OleDbConnection = new System.Data.OleDb.OleDbConnection(connectionString); 
OleDbConnection.Open(); 

一種SEHException拋出異常在運行時,並顯示錯誤消息「外部元件發生異常」

這通常會當Visual Studio中的構建配置平臺不正確時,會發生這種情況,這可能發生在構建配置平臺x86和x64中。

這是由於你的項目的生成配置平臺和安裝在您的計算機上的Microsoft Access數據庫引擎之間的不匹配。

爲了解決此錯誤:

  • 更改構建配置平臺在Visual Studio - 確保它在Microsoft Access數據庫引擎版本相匹配您的機器
  • 重新編譯並運行你的項目
  • 現在應該解決運行時錯誤