就在使用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();

最佳答案

如果您尝试登录,则可以执行这样的扩展方法。

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)));

09-25 22:03