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

如何在Xamarin Studio中查看SQLite.NET PCL生成的SQL?,sqlite,xamarin,xamarin.forms,xamarin-studio,sqlite-net,Sqlite,Xamarin,Xamarin.forms,Xamarin Studio,Sqlite Net,我对此进行了研究,我所能找到的只是一个打开的建议。Trace=true如下: db1 = DependencyService.Get<ISQLite>().GetConnection(); db1.Trace = true; db1=DependencyService.Get().GetConnection(); db1.Trace=true; 我也试过: db2.Trace = true; var categories = db2.Query

我对此进行了研究,我所能找到的只是一个打开的建议。Trace=true如下:

        db1 = DependencyService.Get<ISQLite>().GetConnection();
        db1.Trace = true;
db1=DependencyService.Get().GetConnection();
db1.Trace=true;
我也试过:

 db2.Trace = true;
 var categories = db2.Query<Category>("SELECT * FROM Category ORDER BY Name").ToList();
 Debug.WriteLine("xxxx");
db2.Trace=true;
var categories=db2.Query(“按名称从类别顺序中选择*).ToList();
Debug.WriteLine(“xxxx”);
我这样做了,然后重新启动了应用程序。当我查看应用程序输出时,我只看到有关已启动线程和xxxx的信息,但没有看到任何SQL跟踪信息


有人能给我一些建议吗。谢谢

应用程序输出
窗口中查找开始执行
的行

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

Executing: create table if not exists "Valuation"(
"Id" integer primary key autoincrement not null ,
"StockId" integer ,
"Time" datetime ,
"Price" float )
Executing Query: pragma table_info("Valuation")
Executing: create  index if not exists "Valuation_StockId" on "Valuation"("StockId")

Executing: insert  into "Stock"("Symbol") values (?)

Executing Query: select * from "Stock" where ("Symbol" like (? || '%'))
  0: A
Ref:

使用,这意味着日志仅包含在PCL的调试版本中

删除对的nuget引用(保留本机引用),将其作为类添加到项目中,并在设置跟踪标志的情况下执行调试生成,您将看到跟踪

我不需要做任何特殊的事情,只需将SQLite.cs文件包含在我的Xamarin iOS项目中,即可实现此功能:

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);
    }
}
使用(var conn=new SQLite.SQLiteConnection(“mydb.SQLite”){Trace=true}){
var rows=conn.Table()。其中(row=>row.DurationMinutes<10)。选择(row=>new{row.Title});
foreach(行中的变量行){
Debug.WriteLine(行);
}
}
输出:

Executing Query: select * from "PodcastMetadata" where ("DurationMinutes" < ?)
  0: 10
执行查询:从“PodcastMetadata”中选择*,其中(“DurationMinutes”<?)
0: 10

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

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

谢谢,但我已经在那里找了3-4个小时了:-(说真的,我需要一些帮助和建议。我所做的是将Krueger的nuget package 1.2.0安装到我的应用程序、IOS和Android中。但是我看到你引用了一个SQLite.cs文件。你能告诉我你的应用程序是什么吗?你使用的是什么nuget软件包,它是否也需要我将那个SQLite.cs文件放在一些地方?非常感谢。)当我发现错误时,它并没有提供太多信息。例如,我必须添加try…catch to catch SQLIteException,它只表示“约束”.虽然我知道约束是什么,但我不知道其他任何事情,例如约束发生在哪里,为什么以及在哪个costraint上。我希望启用Tracer to trace可以提供更多信息,但它只提供了它正在执行一些查询的信息