Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 如果不显式调用SQLitePCL.batters.Init(),是否可以避免sqlite3_Open_v2(…)中SqliteConnection.Open()中的NullReferenceException? 问题_C#_.net_Sqlite_.net Framework 4.8_Microsoft.data.sqlite - Fatal编程技术网

C# 如果不显式调用SQLitePCL.batters.Init(),是否可以避免sqlite3_Open_v2(…)中SqliteConnection.Open()中的NullReferenceException? 问题

C# 如果不显式调用SQLitePCL.batters.Init(),是否可以避免sqlite3_Open_v2(…)中SqliteConnection.Open()中的NullReferenceException? 问题,c#,.net,sqlite,.net-framework-4.8,microsoft.data.sqlite,C#,.net,Sqlite,.net Framework 4.8,Microsoft.data.sqlite,我在使用以下模式调用SQLitePCL.raw.sqlite3_open_v2(字符串文件名、sqlite3&db、Int32标志、字符串vfs)时收到一个NullReferenceException: 公共类DBOpenFails { 公共静态void DemoFail() { 使用(var connection=newsqliteconnection(“something.db”)) { connection.Open();//在SQLitePCL.raw.sqlite3_Open_v2(…

我在使用以下模式调用SQLitePCL.raw.sqlite3_open_v2(字符串文件名、sqlite3&db、Int32标志、字符串vfs)时收到一个NullReferenceException:

公共类DBOpenFails
{
公共静态void DemoFail()
{
使用(var connection=newsqliteconnection(“something.db”))
{
connection.Open();//在SQLitePCL.raw.sqlite3_Open_v2(…)中抛出NullReferenceException
}
}
}
但在使用此模式时不会:

公共类dbopensuccessed
{
公共静态工程()
{
SQLitePCL.batters.Init();//这解决了异常
使用(var connection=newsqliteconnection(“something.db”))
{
connection.Open();//有效
}
}
}
有没有办法避免这个电话

SQLitePCL.batters.Init();
我使用的是.NET Framework 4.8,bin目录中存在以下DLL:

  • Microsoft.Data.Sqlite.dll的v3.1.8
  • SQLitePCLRaw.batters\u v2.dll的v2.0.4
  • SQLitePCLRaw.core.dll的v2.0.4
  • SQLitePCLRaw.nativellibrary.dll的v2.0.4
  • SQLitePCLRaw.provider.dynamic_cdecl.dll的v2.0.4
  • 从我对这个问题的调查来看,SQLitePCL插件的目的似乎是能够在不直接调用SQLitePCL.batters.Init()的情况下“引导”

    另一方面,解决方案可能只是直接调用Init()

    调查
    • SQLitePCL.raw的Github页面在“Bundles”部分下声明需要调用Init()
    • 但是有一个github问题解决了类似的问题。它建议解决方案是添加对Microsoft.EntityFrameworkCore.Sqlite的包引用
    • 我的问题是,我没有使用EFCore,而是使用.NETFramework4.8中的ADO.NET
    • 与SQLitePCL.raw的作者进行了讨论,以改进错误消息,显示“您需要调用SQLitePCL.raw.SetProvider()。如果您使用的是捆绑包,则可以通过调用SQLitePCL.batters.Init()来完成。”