Xamarin Forms 中的 SQLite 数据库问题 (sqlite-net-pcl) - "DatabasePath must be specified"
SQLite Database problem in Xamarin Forms (sqlite-net-pcl) - "DatabasePath must be specified"
我正在编写一个简单的 Xamarin Forms 移动应用程序(Android 和 iOS,但目前专注于 Android)作为学校项目。我正在使用 Visual Studio 2019 Community,我已经安装了 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>();
}
}
}
在尝试 运行 程序时,它突出显示上面的 using 行并给出:
System.InvalidOperationException
Message=必须指定数据库路径
我只能通过将数据库的定义移动到 MainPage 本身来解决这个问题。从那里我的程序的其余部分似乎可以通过引用 MainPage.dbPath 来访问该数据库文件;然而,App.xaml 和 MainPage.xaml 之间缺乏沟通非常令人担忧,并且可能会产生进一步的后果,我没有经验无法预测。这是我可以用某种补丁修复的东西吗?我应该把 sqlite-net-pcl 改成别的东西吗?
您正在创建 MainPage
之前 您分配 dbPath
,因此当 MainPage
构造函数执行时 dbPath
是 null
MainPage = new MainPage();
dbPath = filePath;
分配dbPath
先
我正在编写一个简单的 Xamarin Forms 移动应用程序(Android 和 iOS,但目前专注于 Android)作为学校项目。我正在使用 Visual Studio 2019 Community,我已经安装了 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>();
}
}
}
在尝试 运行 程序时,它突出显示上面的 using 行并给出:
System.InvalidOperationException Message=必须指定数据库路径
我只能通过将数据库的定义移动到 MainPage 本身来解决这个问题。从那里我的程序的其余部分似乎可以通过引用 MainPage.dbPath 来访问该数据库文件;然而,App.xaml 和 MainPage.xaml 之间缺乏沟通非常令人担忧,并且可能会产生进一步的后果,我没有经验无法预测。这是我可以用某种补丁修复的东西吗?我应该把 sqlite-net-pcl 改成别的东西吗?
您正在创建 MainPage
之前 您分配 dbPath
,因此当 MainPage
构造函数执行时 dbPath
是 null
MainPage = new MainPage();
dbPath = filePath;
分配dbPath
先