有没有办法查看参数化SqliteCommand的实际命令文本?

时间:2012-02-02 15:10:46

标签: c# .net sqlite prepared-statement

在我的代码中,我使用的是参数化查询,例如:

INSERT INTO table_name VALUES(?,?,?,?);

然后我以编程方式添加参数(例如整数值1,2,3,4),执行命令并且一切都很可爱,但是我想添加一个记录实际执行的SQL的日志输出:

INSERT INTO table_name VALUES(1,2,3,4);

目前我无法看到这样做的方法。

我正在使用.NET 3.5,C#3和http://system.data.sqlite.org

中的最新库

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

只需将Parameters数组与CommandText一起转储到日志中。

答案 1 :(得分:1)

如果我错了(我这里没有源代码),有人纠正我,但是iirc没有“实际的命令文本”。我很确定DB的解析器将您的输入(语句+参数)直接转换为解析树,而没有中间的人类可读的SQL语句。

答案 2 :(得分:0)

你走了,

而不是调试,只需将其转储到您的日志中:

        cmd.Parameters.AddWithValue("@Test", 42);
        Debug.Print(cmd.CommandText);
        foreach (SqlParameter param in cmd.Parameters)
        {
            Debug.Print(param.ParameterName + ": " + param.Value.ToString());
        }

答案 3 :(得分:0)

在这里

public void CommandTextToConsole(SQLiteCommand cmd)
{
    StringBuilder sb = new StringBuilder(cmd.CommandText);
    foreach (SQLiteParameter p in cmd.Parameters)
    {
        sb.Replace(p.ParameterName, "'" + p.Value.ToString() + "'");
    }
    Console.WriteLine(sb);
}