4

我想使用此链接https://github.com/praeclarum/sqlite-net提供的 sqlite-net 。

不幸的是,入门文档还不够。它甚至没有提到如何创建数据库。我尝试查看示例,不幸的是,示例已损坏(无法编译、运行时错误等)。

我可以在网上找到的最实用的教程是http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sqlite-in-c-part-one/

不幸的是,sqlite-net 不完全支持 sqlite.org sqlite 实现,因此使教程对 praeclarum sqlite-net 毫无用处。

从教程中但在 praeclarum sqlite-net 中做同样事情的等效方法是什么?

从教程

创建数据库(这是我卡住的地方)

SQLiteConnection.CreateFile("MyDatabase.sqlite");

连接到数据库

SQLiteConnection m_dbConnection;
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Open();

创建表

string sql = "create table highscores (name varchar(20), score int)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

填表

string sql = "insert into highscores (name, score) values ('Me', 3000)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "insert into highscores (name, score) values ('Myself', 6000)";
command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "insert into highscores (name, score) values ('And I', 9001)";
command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

查询数据库

string sql = "select * from highscores order by score desc";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
    Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);
4

2 回答 2

9

在你可以使用 lambdas 的地方。这些类是强类型的。

让事情变得更干净。

如果您涉及任何数量的数据缓存,您最终会希望您有类似 Microsoft 的同步框架之类的东西可以在 Mono 中使用。我真的在您的帖子中猜测,您正在考虑使用 Xamarin。如果您要在本地缓存数据,请查看他们的 SQLCipher 组件。

此外,如果您确实通过组件存储使用 SQLCipher.. 它可以在 Android 2.3 上运行。因此,即使在您的项目中添加了支持库,也不要指望一个完全向后兼容的系统。

var db = new SQLiteConnection("sqllite.db")

db.CreateTable<SyncRecord> ();

db.Insert (new SyncRecord () { SyncDate = DateTime.UtcNow });

var query = db.Table<SyncRecord> ().Where( /* your lambda to filter*/);

于 2013-11-08T04:49:36.807 回答
2

我建议的答案基于@Slack-Shot 响应。

我尝试将教程转换为 praeclarum sqlite 语法兼容,以供参考像我这样的其他超级菜鸟。

创建和/或连接到数据库

private string dbPath = System.IO.Path.Combine
    (System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
     "MyDatabase.sqlite");

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath)) {}

创建表

public class highscore
{
    [MaxLength(20)]
    public string name { get; set; }
    public int score { get; set; }
}

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath))
{
    m_dbConnection.CreateTable<highscore>();
}

填表

using (var m_dbConnection = new SQLite.SQLiteConnection(dbPath))
{
    m_dbConnection.Insert(new highscore()
    {
        name = "Me",
        score = 9001
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "Me",
        score = 3000
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "Myself",
        score = 6000
    });
    m_dbConnection.Insert(new highscore()
    {
        name = "And I",
        score = 9001
    });
}

查询数据库

假设我有一个简单的 SQL 字符串,如下所示:“select * from highscores order by score desc”

如何以这种形式显示它:

for(int i = 0; i < totalDataQueried; i++)
    Console.WriteLine("Name: " + name[i] + "\tScore: " + score[i]);
于 2013-11-08T09:58:12.637 回答