我使用C#建立数据库连接,然后使用临时SQL获取数据。这个简单的SQL查询非常易于调试,因为我可以记录SQL查询字符串。如果我使用参数化的SQL查询命令,是否有任何方法可以记录SQL查询字符串以进行调试?
我想这就是它。将此代码放在配置了查询命令的位置,然后您将在debugSQL将要执行的SQL语句中
string debugSQL = cmd.CommandText;
foreach (SqlParameter param in cmd.Parameters)
{
debugSQL = debugSQL.Replace(param.ParameterName, param.Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)
使用库的“调试”标志通常是最简单的解决方案。但是你依赖的库可能会对你撒谎,或者至少隐藏它会做的一些事情(例如,psycopg 默默地更改默认的隔离级别)。
在 DBMS 端,您始终可以激活日志记录。它的好处是,无论您的客户端库做什么,您都将获得准确的 SQL 请求。在这方面,它比库的“调试”标志更好。但是,在某些 DBMS 上,记录语句可能非常慢(PostgreSQL 就是这种情况)。
如果您有足够的权限,另一种解决方案是在网络上使用嗅探器。Wireshark可以解码许多 DBMS 的协议并呈现实际的 SQL 请求。
在PostgreSQL上,激活日志记录是postgresql.conf通过以下方式完成的:
log_statement = 'all' # none, ddl, mod, all
Run Code Online (Sandbox Code Playgroud)
我通常也使用:
log_connections = on
log_disconnections = on
log_duration = on
log_hostname = on
Run Code Online (Sandbox Code Playgroud)