Windows phone 8.1 的 SQLite 数据读取器

Sqlite data reader for Windows phone 8.1

目前 windows phone 8.1 的 SQLite 没有附带 SQLite 数据读取器,但是我需要在不知道类型的情况下从 SQLite DB 读取数据,这是因为 Table 数据和模式可以在外部更改(在我的应用程序之外)。

那么有什么方法可以读取 SQLite table 数据,如下所示

var connection = new SQLiteConnection(dbName);
connection.Query<T>("Select * from Table") 

其中 T 未知?

或者,是否可以根据从 connection.GetTableInfo("Table name") 获得的列列表动态创建 T?

您可以使用 Andy Wigley 的 SQLiteWinRT 包装器,它支持普通的非类型化 SQL (https://sqlwinrt.codeplex.com/)。

您可以使用普通的旧语句:

// Get the file from the install location  
var file = await Package.Current.InstalledLocation.GetFileAsync("cities.db");  

// Create a new SQLite instance for the file 
var db = new Database(file);  

// Open the database asynchronously
await db.OpenAsync(SqliteOpenMode.OpenRead);

// Prepare a SQL statement to be executed
var statement = awaitdb.PrepareStatementAsync(
  "SELECT rowid, CityName FROM Cities;"); 

// Loop through all the results and add to the collection
while (awaitstatement.StepAsync())
   items.Add(statement.GetIntAt(0) + ": "+ statement.GetTextAt(1));

或者你可以使用准备好的语句(这当然更好,因为它提供了更多的模块化):

// Prepare a SQL statement to be executed with a parameter
var statement = await db.PrepareStatementAsync(
  “SELECT rowid, CityName FROM Cities WHERE CityName LIKE ?;”);

// Bind the parameter value to the statement
statement.BindTextParameterAt(1, “c%”);

// Loop through all the results and add to the collection
// Same as above

如您所见,查询 return 可用于构造对象的简单字符串。或者您可以直接使用它们(您提到您不一定了解底层对象)。

这是另一个可以帮助您入门的教程:http://blogs.windows.com/buildingapps/2013/05/30/sqlite-winrt-wrapper-for-windows-phone/