从带参数的DbCommand获取SQL查询字符串

本文关键字:SQL 查询 字符串 获取 DbCommand 参数 | 更新日期: 2023-09-27 18:09:15

在c#中对MySQL数据库执行SQL查询之前,我想记录将要执行的查询。我现在得到的显然是SELECT * FROM foo WHERE Id = @Id的对数我想看到的是SELECT * FROM foo WHERE Id = 5。我怎么做呢?

    DbCommand dbCommand = dbFactory.CreateCommand();
    dbCommand.CommandText = "SELECT * FROM foo WHERE Id = @Id";
    DbParameter param = dbCommand.CreateParameter();
    param.ParameterName = "@Id";
    param.Value = 5;
    dbCommand.Parameters.Add(param);
    dbConnection.Open();
    Log.AddVerbose(String.Format("SQL query: {0}", dbCommand.CommandText));
    dbCommand.ExecuteReader();

从带参数的DbCommand获取SQL查询字符串

如果你想记录日志,你可以这样做一个扩展方法。

public static string GetGeneratedQuery(this SqlCommand dbCommand)
{
    var query = dbCommand.CommandText;
    foreach (var parameter in dbCommand.Parameters)
    {
            query = query.Replace(parameter.ParameterName, parameter.Value.ToString());
    }
    return query;
}

你可以这样使用

Log.AddVerbose(String.Format("SQL query: {0}", GetGeneratedQuery(dbCommand)));