我有一个c#DataSet对象,其中包含一个表,并在其中放入一些数据,我对该数据集进行了一些更改(通过代码)。
当我使用类似这样的代码将数据集更新到数据库时,是否有办法获取此数据集将在sql服务器上执行的实际t-sql查询:
var dataAdapter = new SqlDataAdapter(cmdText, connection);
var affected = dataAdapter.Update(updatedDataSet);
我想知道此数据集将向数据库发出什么查询,以便我可以将这些更改记录到我的c#程序中的日志文件中。
答案 0 :(得分:1)
您可以订阅SqlDataAdapter
的{{3}}和RowUpdating
个事件。他们会告诉你即将执行的SqlCommand
或刚刚执行的{{1}}。
您可以通过设置事件随附的RowUpdated
的Status
属性来影响当前和将来的更新行。它的类型为SqlRowUpdatingEventArgs
,因此您可以告诉它跳过当前或以后的所有行。
答案 1 :(得分:0)
询问SqlDataAdapter的SqlCommand对象
答案 2 :(得分:0)
您可以围绕System.Data.SqlClient
提供程序构建一个包装器(例如,在配置文件中注册的提供程序为... providerName="System.Data.SqlClient
“)。基本上是一个拦截代理你可以访问通过提供商传递的所有信息,并且可以虹吸您需要的内容,拦截,修改,聚合和/或丰富它。这有点先进但是打开了获取一系列信息的大门插入/更换/移除作为单独的关注层。