关于OleDb连接打开的SEHException

Ove*_*ive 13 c# oledb ms-access f#

我正在开发一个简化日志记录的小应用程序,它通过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
Run Code Online (Sandbox Code Playgroud)

现在通过FSI进行测试就像预期的那样.但是,当我从C#WPF项目中使用此API时,它会抛出一个SEHExceptionat conn.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();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ove*_*ive 10

在Philip的帮助下,我能够弄明白.似乎默认情况下,FSI配置为默认运行64位,而WPF项目设置为"首选32位".将WPF项目的目标平台更改为64位解决了该问题.