Zajmuję się tworzeniem małej aplikacji, która uprości rejestrowanie, czyni to poprzez dodanie niektórych danych wejściowych do bazy danych MS Access za pośrednictwem OleDB.Wyjątek SEHException na otwartym porcie OleDb
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
Teraz testowanie tego przez FSI działa zgodnie z oczekiwaniami. Jednak, gdy skonsumuję ten API z projektu C# WPF, wygeneruje on SEHException
pod adresem conn.Open()
. Naprawdę drapię się po głowie, dlaczego tak się dzieje.
Edit
Jak sugeruje, mam również starał się realizować ten sam kod wyłącznie w języku C# i w tym samym projekcie, będzie rzucać ten sam wyjątek w tym samym miejscu, ale jestem delegowania kod poniżej odniesienie.
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();
}
}
}
Czy próbowałeś zastąpić go równoważnym kodem C# w ramach WPF p roject i zobacz, czy błąd nadal występuje? – AlexFoxGill
Co mówi ten wyjątek? –
@FyodorSoikin '' Komponent zewnętrzny ma wyjątek. ' –