8

有没有办法在 CommandText 执行后立即访问它?我有以下代码:

cmd = new OracleCommand(sql.ToString(), conn);
cmd.Parameters.Add(new OracleParameter("@parm", parmValue));


OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

我需要知道的是在数据库中执行的 sql 命令字符串已经包含在 sql 中的 parmValue 值。换句话说,我不能在查询中看到字符串“@parm”,而是看到它的值。

我需要这个,以便我可以将此 sql 推送到日志数据库中以供将来参考。

提前致谢。

4

2 回答 2

2

我不确定 Oracle 是否完全以这种方式工作,但对于大多数其他 DB 提供程序,参数化查询不会作为纯文本查询发送到服务器,而是作为具有适当参数的执行命令发送。换句话说,在您的应用程序级别不会发生替换,仅在 DB 本身中发生。要查看在服务器上执行的实际命令,您可能需要查看数据库本身的跟踪/日志。

于 2011-10-27T19:54:55.100 回答
1

我不确定 Oracle,但在我个人使用的 RDBMS 中,这是无法做到的。

当我需要获取参数并查看生成的 SQL 查询时,我总是通过循环代码中的参数集合并提取名称/值对以将生成的查询或类似内容记录到我们的错误日志中来完成数据库:

StoredProc=InsertCallRecord:参数:CallId=1234;Custid=651;PersonCalling=Dave...

我只在错误记录上这样做,因为每次调用都会拖累性能,但它也可以在测试场景中工作。

于 2011-10-27T15:27:28.873 回答