我正在使用SQLite作为在UI和服务之间移动数据的方法,但我遇到了一些问题。我环顾四周,看不到其他人有这样的问题。我已经检查了所有的引用,包含Interop dll的x64文件夹包含在项目中,所有这些dll都设置为复制到输出目录,所有目录都具有正确的权限,没有任何工作。
这是我遇到的一个更大问题的一部分,如果我在BackgroundWorker Completed函数中使用SQLite Connection,那么整个服务崩溃,找不到File异常,如果我在实际的BackgroundWorker中运行SQLite Connection我得到的无法加载DLL'SQLite.Interop.dll'错误,最后如果我在与BackgroundWorker无关的函数中使用SQLite连接,那么它可以正常工作(从BackgroundWorker事件函数引用此函数会分别导致相同的错误)。
对此的任何帮助都很棒
代码
Dim LiteUpdateString As String = ""
Dim LiteConnection = New SQLiteConnection("Data Source=C:\...\AppData\Roaming\OPCService\Tags.db;Version=3;FailIfMissing=True")
Dim LiteUpdate As String = ""
UpdateNumber += 1
teststring += UpdateNumber.ToString
LiteUpdate = $"UPDATE SQLiteTags SET TagQuality='{teststring}' {SQLWhere}"
Dim Command As New SQLiteCommand(LiteUpdate, LiteConnection)
LiteConnection.Open()
Command.ExecuteReader()
LiteConnection.Close()
错误
BackgroundWorkerCompleted
应用程序:OPCService.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程终止。 异常信息:System.IO.FileNotFoundException at OPCService.OPCService.BackgroundWorker1_RunWorkerCompleted(System.Object,System.ComponentModel.RunWorkerCompletedEventArgs) 在System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(System.ComponentModel.RunWorkerCompletedEventArgs) 在System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean) 在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean) 在System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在System.Threading.ThreadPoolWorkQueue.Dispatch()
BackgroundWorker的
无法加载DLL'SQLite.Interop.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)
答案 0 :(得分:0)
我终于设法找到了一个解决方法,因为我可以在一个独立的函数中使用SQLite但是不能从BackgroundWorker事件线程中调用该函数,一旦线程完成就启动一个计时器来执行独立的SQLite函数。