C# 将数据库从安装位置复制到本地文件夹
我有一个关于“ms”的数据库-appx:///Databases/tryout2.sqlite“(安装位置)。我想将其复制到本地应用程序文件夹,因为每次用户登录时,我都需要将数据插入数据库中的表中(如果名称和电子邮件相同,则不会插入数据库)。当用户首次登录时,我遇到了问题,然后数据库可以复制到本地文件夹。但如果用户再次登录,则会出现如下错误消息: App.xaml.cs:C# 将数据库从安装位置复制到本地文件夹,c#,sqlite,uwp,C#,Sqlite,Uwp,我有一个关于“ms”的数据库-appx:///Databases/tryout2.sqlite“(安装位置)。我想将其复制到本地应用程序文件夹,因为每次用户登录时,我都需要将数据插入数据库中的表中(如果名称和电子邮件相同,则不会插入数据库)。当用户首次登录时,我遇到了问题,然后数据库可以复制到本地文件夹。但如果用户再次登录,则会出现如下错误消息: App.xaml.cs: public static string DB_PATH = Path.Combine(Path.Combine(
public static string DB_PATH = Path.Combine(Path.Combine(Package.Current.InstalledLocation.Path, @"Databases\tryout2.sqlite"));
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
if (!CheckFileExists("tryout2.sqlite").Result)
{
using (var db = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DB_PATH))
{
db.CreateTable<DBQUIZ>();
db.CreateTable<DBQUESTION>();
db.CreateTable<DBOPTION>();
db.CreateTable<DBUSER>();
db.CreateTable<DBRESULT>();
}
}
}
private async Task<bool> CheckFileExists(string fileName)
{
try
{
var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return true;
}
catch
{
}
return false;
}
如何处理?或者是否有其他方法将数据插入安装位置数据库中的表?您正在将文件复制到其自己的位置?(插入器方法)。你看了吗?@brijber是的,我想将数据库从已安装的locaton复制到本地包文件夹。因为在将数据插入数据库的安装位置时,无法执行此操作。错误消息显示为只读。或者有其他方法吗?@AVK i use private async Task CheckFileExists(字符串文件名)在我的DatabaseHelper.class中。如果可以使用,它会在指定的文件夹中创建文件的副本并重命名副本。此方法还指定如果目标文件夹中已存在同名文件,应执行的操作。
string DB_PATH_COPY;
public void CreateDatabase(string DB_PATH)
{
if (!CheckFileExists(DB_PATH).Result)
{
using (SQLite.Net.SQLiteConnection dbConn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
{
dbConn.CreateTable<DBQUIZ>();
dbConn.CreateTable<DBQUESTION>();
dbConn.CreateTable<DBOPTION>();
dbConn.CreateTable<DBUSER>();
dbConn.CreateTable<DBRESULT>();
}
}
}
private async Task<bool> CheckFileExists(string fileName)
{
try
{
var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return true;
}
catch
{
return false;
}
}
public async void InsertUser(DBUSER objUser)
{
if (!CheckFileExists(DB_PATH_COPY).Result)
{
StorageFile dbFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Databases/tryout2.sqlite"));
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile dbFileCopy = await dbFile.CopyAsync(localFolder);
DB_PATH_COPY = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, dbFileCopy.Path.ToString()));
}
using (var dbConn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DB_PATH_COPY))
{
dbConn.RunInTransaction(() =>
{
dbConn.Insert(objUser);
});
}
}
DatabaseHelper Db_Helper = new DatabaseHelper();//Creating object for DatabaseHelperClass.cs from ViewModel/DatabaseHelperClass.cs
if (emailField.Text != "" & namaField.Text != "")
{
Db_Helper.InsertUser(new Tryout.Models.DBUSER(emailField.Text, "", 0, namaField.Text));
this.Frame.Navigate(typeof(Tryout.TryoutHome1));
}
else
{
MessageDialog messageDialog = new MessageDialog("Nama dan Email harus diisi");//Text should not be empty
await messageDialog.ShowAsync();
}