ADO.NET查询未在XEvents中显示

问题描述 投票:0回答:1

我使用PowerShell的ADO.Net SqlAdapter向SQL Server发送了一个查询。查询返回正确的结果。当我使用sqlserver.sql_statement_starting事件运行XEvent会话时,ADO.NET中的查询不会显示。我从SSMS发送的查询会立即显示。

这是一个错误,或者为什么我看不到ADO.NET查询?

我正在使用的代码是

$serverName = 'localhost'
$databaseName = 'Contoso Retail DW'
$schemaName = 'dbo'
$tableName = 'FactSalesFMCG'

$connString = Get-ConnectionString -IntegratedSecurity -Server $serverName -Database $databaseName 
$sqlConn = [System.Data.SqlClient.SqlConnection]::new($connString) 
$sqlConn.Open()
$columnMetadataAdapter = Get-ColumnMetadataAdapter -Conn $sqlConn -SchemaName $schemaName -TableName $tableName
$table = [System.Data.DataTable]::new()
$columnMetadataAdapter.Fill($table)
$sqlConn.Close()

Get-ConnectionString和Get-ColumnMetadataAdapter是PowerShell函数,可帮助创建所需的ADO.NET对象。该表填充了我想要的列元数据,但SELECT语句未显示在XEvents中。

sql-server ado.net extended-events
1个回答
1
投票

不能责备。

CREATE EVENT SESSION [trc] ON SERVER 
ADD EVENT sqlserver.rpc_completed,
ADD EVENT sqlserver.sp_statement_completed,
ADD EVENT sqlserver.sql_batch_completed,
ADD EVENT sqlserver.sql_statement_completed
GO

启动会话并在SSMS中观看直播活动。

然后

PS C:\Users\dbrowne> $da = new-object system.data.sqlclient.sqldataadapter
PS C:\Users\dbrowne> $con = new-object system.data.sqlclient.sqlconnection "server=.;database=tempdb;integrated security=true"
PS C:\Users\dbrowne> $con.open()
PS C:\Users\dbrowne> $cmd = $con.createcommand()
PS C:\Users\dbrowne> $cmd.commandtext = "select * from sys.objects"
PS C:\Users\dbrowne> $da.selectcommand = $cmd
PS C:\Users\dbrowne> $dt = new-object system.data.datatable
PS C:\Users\dbrowne> $da.fill($dt)
106

并查看sql_statement_completed和sql_batch_completed(注意使用不同的代码,您可能会得到一个rpc_completed而不是sql_batch_completed)。

enter image description here

如果将参数绑定到SqlCommand,它将作为RPC调用而不是批处理调用发送,并且事件将有点不同rpc / sp而不是batch / sql。

rpc_completed/sp_statement_completed

代替

sql_batch_completed/sql_statement_completed

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.