Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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# Xamarin表单中的SQLite数据库问题(SQLite net pcl)-“;必须指定数据库路径";_C#_Sqlite_Xamarin.forms_Sqlite Net Pcl - Fatal编程技术网

C# Xamarin表单中的SQLite数据库问题(SQLite net pcl)-“;必须指定数据库路径";

C# Xamarin表单中的SQLite数据库问题(SQLite net pcl)-“;必须指定数据库路径";,c#,sqlite,xamarin.forms,sqlite-net-pcl,C#,Sqlite,Xamarin.forms,Sqlite Net Pcl,我正在编写一个简单的Xamarin Forms移动应用程序(Android和iOS,但目前主要关注Android)作为学校项目。我使用的是Visual Studio 2019社区,我已经安装了NuGet软件包sqlite net pcl v1.7.335 当应用程序在尝试访问数据库时突然抛出错误,并说“必须指定DatabasePath”时,一切都在进行中 我担心自己的代码可能出错,于是创建了一个空白应用程序,只尝试了一个简单的数据库连接。同样的错误也会发生。请看下面我的代码 MainActivi

我正在编写一个简单的Xamarin Forms移动应用程序(Android和iOS,但目前主要关注Android)作为学校项目。我使用的是Visual Studio 2019社区,我已经安装了NuGet软件包sqlite net pcl v1.7.335

当应用程序在尝试访问数据库时突然抛出错误,并说“必须指定DatabasePath”时,一切都在进行中

我担心自己的代码可能出错,于是创建了一个空白应用程序,只尝试了一个简单的数据库连接。同样的错误也会发生。请看下面我的代码

MainActivity.cs

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

        string fileName = "datahold.db";
        string folderPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        string completePath = Path.Combine(folderPath, fileName);

        LoadApplication(new App(completePath));
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
App.xaml.cs

public App(string filePath)
    {
        InitializeComponent();

        MainPage = new MainPage();
        dbPath = filePath;
    }
MainPage.xaml.cs

 public partial class MainPage : ContentPage
{
    public MainPage()
    {
        
        InitializeComponent();
        using (SQLiteConnection myCon = new SQLiteConnection(App.dbPath))
        {
            myCon.CreateTable<term>();
        }
    }
}
public分部类主页面:ContentPage
{
公共主页()
{
初始化组件();
使用(SQLiteConnection myCon=newsqliteconnection(App.dbPath))
{
myCon.CreateTable();
}
}
}
尝试运行程序时,它会突出显示上面的using行,并给出:

System.InvalidOperationException异常 Message=必须指定数据库路径


我只能通过将数据库的定义移动到主页本身来纠正这个问题。从那里,我的程序的其余部分似乎可以通过引用MainPage.dbPath来访问该数据库文件;然而,App.xaml和MainPage.xaml之间缺乏沟通是一个非常令人担忧的问题,可能会产生更多的影响,我对此经验不足,无法预测。这是我可以用某种补丁修复的东西吗?我是否应该将sqlite net pcl更改为其他内容?

在分配
dbPath
之前,您正在创建
MainPage
,因此当
MainPage
构造函数执行
dbPath
时,它是
null

MainPage = new MainPage();
dbPath = filePath;

首先分配
dbPath

。。。哇!非常感谢。问题解决了。