2011-10-27 22 views
8

有没有一种方法可以在执行后访问CommandText? 我有以下代码:在参数替换后查看确切的sql C#

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 parmValue的值数据库执行的SQL命令字符串。换句话说,我不能在查询中看到字符串“@parm”,而是看到它的值。

我需要这个,以便我可以在日志数据库中推这个sql以备将来参考。

在此先感谢。

+2

即使它实际上被发送到sql服务器,它被参数化;变量被声明并在查询中使用。 –

+1

[如何从SqlCommand对象获取生成的SQL语句?](http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a -sqlcommand-object) –

+0

该死!那是我的回答!当我打字时,你发现了这个蠢货。 – David

回答

1

我不确定Oracle是什么,但在RDBMS的工作中,我个人无法完成。

当我需要获取参数并查看结果SQL查询时,我总是通过遍历代码中的参数集合并提取名称/值对来记录结果查询或类似的东西进入我们的错误日志数据库:

StoredProc = InsertCallRecord:参数: 呼叫ID = 1234; CUSTID = 651; PersonCalling =戴夫...

我只能这样做的错误日志,因为它是一个性能在每次调用时都要拖动它,但它也可以在测试场景中运行。

2

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