【发布时间】:2016-06-15 16:14:15
【问题描述】:
我正在尝试创建一个外部 sqlite 数据库,我跟踪并测试了可移动存储中的文本文件并且可以正常工作。然后我尝试在可移动存储中创建一个数据库:
public static async Task<String> CreateDatabase(string name)
{
var folder = await FindRemovableStorage();
if (folder != null)
{
var file = await folder.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting);
if(file!=null)
{
var ret = $"{folder.Name}{file.Name}";
return ret;
}
}
return null;
}
public async void ThirdCase()
{
var path =await DataLoggerService.CreateDatabase("db.dat");
var connection = new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), path); //Cannot Open
}
我正在桌面上进行测试,并返回无法打开。有没有人从典型的本地文件夹中创建了一个数据库?
我在这里所做的更多细节:datalogger
当我完成后,我想在 Raspberry Pi 中实现,理论上 Windows IoT 的代码是相同的,还是 SQLitePlatformWinRT 有任何变化?
版本:更多分析:
我已经测试了一个典型的数据库,像一个魅力一样工作:
Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.dat");
我想在外部存储中创建数据库,为此我需要添加以下步骤:
1.- 添加使用可移动存储的功能。 2.- 添加文件类型关联,以便有权管理该类型的文件
(详情请看:http://expediteapps.com/blog/data-logger-with-windows-10-iot-in-progress/)
然后我将路径更改为可移动存储路径,例如“E:\db.dat”,它总是告诉CannotOpen。
SQLite 库 PCL 到这里了:
SQLiteApiWinRT.cs
public Result Open(byte[] filename, out IDbHandle db, int flags, IntPtr zvfs)
{
Sqlite3DatabaseHandle internalDbHandle;
var ret = (Result)SQLite3.Open(filename, out internalDbHandle, flags, zvfs);
db = new DbHandle(internalDbHandle);
return ret;
}
开放在哪里
[DllImport("sqlite3", EntryPoint = "sqlite3_open_v2", CallingConvention = CallingConvention.Cdecl)]
public static extern Result Open(byte[] filename, out IntPtr db, int flags, IntPtr zvfs);
我在哪里使用:
SQLite.UAP.2015, Version=3.8.10
更多补充:
我已经测试了这个库 https://www.nuget.org/packages/SQLitePortable/ 并且我完成了同样的错误,所以它是内部的。
这就是路的尽头,有什么帮助吗?
【问题讨论】: