微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在编写一个简单的 Xamarin Forms 移动应用(Android 和 iOS,但目前专注于 Android)作为一个学校项目。我正在使用 Visual Studio 2019 社区并安装了 NuGet 包 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,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>();
        }
    }
}

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

system.invalidOperationException Message=必须指定DatabasePath

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

解决方法

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

MainPage = new MainPage();
dbPath = filePath;

分配 dbPath

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。