Запрос ADO.NET не отображается в XEvents - PullRequest
0 голосов
/ 01 марта 2019

Я отправил запрос на SQL Server с помощью ADO.Net SqlAdapter из PowerShell.Запрос возвращает правильный результат.Когда я запускаю сеанс XEvent с событием sqlserver.sql_statement_starting, запрос из 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.

1 Ответ

0 голосов
/ 01 марта 2019

Невозможно воспроизвести.

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 вместо пакетного / sql.

rpc_completed/sp_statement_completed

вместо

sql_batch_completed/sql_statement_completed

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...