Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OleDb连接上的SEHException打开_C#_Ms Access_F#_Oledb - Fatal编程技术网

C# OleDb连接上的SEHException打开

C# OleDb连接上的SEHException打开,c#,ms-access,f#,oledb,C#,Ms Access,F#,Oledb,我正在开发一个可以简化日志记录的小应用程序,它通过OleDB向MS Access数据库添加一些输入来简化日志记录 let private conn = new OleDbConnection(connectionString) let private submitCmd date wins = let cmd = new OleDbCommand("INSERT INTO ArenaStats ([Date], [Wins]) VALUES (@Date, @Wins)",

我正在开发一个可以简化日志记录的小应用程序,它通过OleDB向MS Access数据库添加一些输入来简化日志记录

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被配置为在默认情况下以64位运行,而WPF项目被设置为“首选32位”。将WPF项目的目标平台更改为64位解决了此问题。

尝试运行以下代码时:

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异常,错误消息为“外部组件已引发异常”

当VisualStudio中的生成配置平台不正确时,通常会发生这种情况,在生成配置平台x86和x64中都可能发生这种情况

这是由于项目的生成配置平台与计算机上安装的Microsoft Access数据库引擎不匹配造成的

要解决此错误:

  • 在Visual Studio中更改生成配置平台-确保它与计算机上的Microsoft Access数据库引擎版本匹配
  • 重新编译并运行您的项目
  • 现在应该解决运行时错误
我知道这是一个非常旧的线程,但我只是用不同的解决方案遇到了相同的问题

当我为ACE提供程序安装Access Database Engine 2016可再发行(x64)时,安装程序给我一个错误,没有安装VCRUNTIME140.DLL,但安装程序无论如何都已完成,ACE提供程序可用


卸载Access数据库引擎,安装VC++2015可再发行R3(),然后重新安装Access数据库引擎解决了问题。

您是否尝试过在WPF项目中用等效的C代码替换它,并查看错误是否仍然发生?异常情况如何?@FyodorSoikin
外部组件引发了异常。
@OverlyExcessive在fsi和WPF应用程序中的WPF进程(1)是在一个线程上运行的查询吗?(2) 一个运行在32位模式下,另一个运行在64位模式下吗?@PhillipTrelford看来你击中了要害!FSI默认设置为64位运行,我的WPF项目似乎设置为32位目标。改变平台目标使其工作!
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();