如何在Xamarin Studio中看到SQLite.NET PCL生成的SQL?

时间:2016-10-23 03:36:16

标签: sqlite xamarin xamarin.forms xamarin-studio sqlite-net

我对此进行了研究,我发现的所有建议都是打开的.Trace = true就像这样:

        db1 = DependencyService.Get<ISQLite>().GetConnection();
        db1.Trace = true;

我也试过这个:

 db2.Trace = true;
 var categories = db2.Query<Category>("SELECT * FROM Category ORDER BY Name").ToList();
 Debug.WriteLine("xxxx");

我做了这个,然后重新启动了应用程序。当我查看应用程序输出时,我只看到有关已启动的线程和xxxx的信息,但没有看到任何SQL跟踪信息。

任何人都可以就此提出建议。感谢

3 个答案:

答案 0 :(得分:2)

您需要在Trace上设置TracerSQLiteConnection(操作)属性,以便打印查询输出:

db.Tracer = new Action<string>(q => Debug.WriteLine(q));
db.Trace = true;

答案 1 :(得分:0)

Generator<Promise<T>>窗口中查找以 Application Output

开头的行

Executing设置为true后的输出示例:

Trace

参考:https://github.com/praeclarum/sqlite-net/blob/38a5ae07c886d6f62cecd8fdeb8910d9b5a77546/src/SQLite.cs

答案 2 :(得分:0)

SQLite PCL使用Debug.WriteLine,这意味着日志仅包含在PCL的Debug版本中。

删除对sqlite.net PCL的nuget引用(保留本机引用),然后将SQLite.cs作为类添加到项目中,并执行调试构建,并设置Trace标记,并且&& #39;我会看到跟踪。

除了在我的Xamarin iOS项目中包含SQLite.cs文件之外,我没有做任何其他特殊工作:

using (var conn = new SQLite.SQLiteConnection("mydb.sqlite") { Trace = true }) {
    var rows = conn.Table<PodcastMetadata>().Where(row => row.DurationMinutes < 10).Select(row => new { row.Title });
    foreach (var row in rows) {
        Debug.WriteLine(row);
    }
}

输出:

Executing Query: select * from "PodcastMetadata" where ("DurationMinutes" < ?)
  0: 10