繁体   English   中英

SQLite Xamarin 中的数据库问题 Forms(sqlite-net-pcl)-“必须指定数据库路径”

[英]SQLite Database problem in Xamarin Forms (sqlite-net-pcl) - "DatabasePath must be specified"

我正在编写一个简单的 Xamarin Forms 移动应用程序(Android 和 iOS,但现在专注于 ZE84E30B9390CDB46DZDB6 学校项目)。 我正在使用 Visual Studio 2019 社区并且我已经安装了 NuGet package sqlite-net-pcl v1.7.335

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

担心我的代码可能出错,我创建了一个空白应用程序并仅尝试了一个简单的数据库连接。 发生同样的错误。 请在下面查看我的代码。

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;
    }

主页.xaml.cs

 public partial class MainPage : ContentPage
{
    public MainPage()
    {
        
        InitializeComponent();
        using (SQLiteConnection myCon = new SQLiteConnection(App.dbPath))
        {
            myCon.CreateTable<term>();
        }
    }
}

在尝试运行程序时,它会突出显示上面的 using 行并给出:

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

我只能通过将数据库的定义移动到 MainPage 本身来纠正这个问题。 从那里开始,我的程序的 rest 似乎能够通过引用 MainPage.dbPath 来访问该数据库文件; 但是,App.xaml 和 MainPage.xaml 之间缺乏沟通是非常令人担忧的,并且可能会产生进一步的后果,我经验不足,无法预测。 这是我可以用某种补丁解决的问题吗? 我应该把 sqlite-net-pcl 换成别的东西吗?

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

MainPage = new MainPage();
dbPath = filePath;

首先分配dbPath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM