Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Xamarin+sqlite:读取数据库时出现问题_Android_Database_Visual Studio_Sqlite_Xamarin - Fatal编程技术网

Android Xamarin+sqlite:读取数据库时出现问题

Android Xamarin+sqlite:读取数据库时出现问题,android,database,visual-studio,sqlite,xamarin,Android,Database,Visual Studio,Sqlite,Xamarin,我正在打开一个数据库文件,运行select*查询,但找不到任何对象。我有: 为SQLite在DB浏览器中创建DB,将DB文件存储在公共项目中,并使用正确的构建操作AndroidAsset/BundleResource为Droid/iOS创建资产/资源 在Droid中的公共代码和数据库服务中创建接口: public SQLiteConnection CreateConnection() { var sqliteFilename = "StepsDatabase.db"; strin

我正在打开一个数据库文件,运行select*查询,但找不到任何对象。我有:

为SQLite在DB浏览器中创建DB,将DB文件存储在公共项目中,并使用正确的构建操作AndroidAsset/BundleResource为Droid/iOS创建资产/资源 在Droid中的公共代码和数据库服务中创建接口:

public SQLiteConnection CreateConnection()
{
    var sqliteFilename = "StepsDatabase.db";
    string documentsDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    var path = Path.Combine(documentsDirectoryPath, sqliteFilename);

    var conn = new SQLite.SQLiteConnection(path);

    //conn.CreateTable<Step>();
    //conn.CreateTable<SuperStep>();

    return conn;
}
创建了一个调用CreateConnection的DatabaseManager,然后创建了一个来自表和空列表的select*查询。 即使在调试和检查conn变量时,它的TableMappings Count=0

PS使用sqlite net pcl NuGet安装在所有项目中

我已经在这个问题上呆了很长时间,并且在互联网上搜索过,但是没有一个对其他人有效的解决方案对我有效。请帮忙


这也是我的第一个问题,如果我做错了什么,请告诉我。

您可以使用EF Core轻松访问Sqlite数据库

使用以下命令安装EFCore Sqlite软件包:

Install-Package Microsoft.EntityFrameworkCore.Sqlite

然后,您可以使用EFCore标准函数在运行时创建数据库。

我从未正确打开数据库资产,只是创建了一个空文件。我现在用

var binaryReader = new BinaryReader(Android.App.Application.Context.Assets.Open(sqliteFilename))

打开资产并将其写入我最初尝试打开的文件位置。一旦我创建了连接,它就会正确地映射到我的对象,我有一个列表要使用!::

您正在创建一个空数据库,因为您使用的路径与存储预创建数据库的位置资源/资产不匹配。如果您打算写入数据库,则需要在应用程序启动时将其复制到用户可写文件夹。我只打算从中读取。我已经检查了它创建的路径,并在设备监视器中查看,它就在那个位置。我还检查了文件.Existspath,它返回true。如果数据库不存在,SQLite将创建一个新的数据库。因此file.exists实际上可能并不有用。你需要了解如何使用android资产你有任何资源或链接吗?我读过的每一篇文章和看到的每一个例子都表明,资产将走上这条道路。非常感谢。
var binaryReader = new BinaryReader(Android.App.Application.Context.Assets.Open(sqliteFilename))