我想使用此链接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"]);
答案 0 :(得分:9)
在你可以使用lambdas的地方。这些类是强类型的。
使事情变得更加清洁。
如果你进入任何数量的数据缓存,你最终希望你有像微软的同步框架一样在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*/);
答案 1 :(得分: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字符串,如下所示: “按照得分desc从高分榜中选择*”
如何以这种形式显示它:
for(int i = 0; i < totalDataQueried; i++)
Console.WriteLine("Name: " + name[i] + "\tScore: " + score[i]);