ADO.NET XEvents 中未显示查询
ADO.NET query not showing in XEvents
我使用 PowerShell 中的 ADO.Net SqlAdapter 向 SQL 服务器发送了一个查询。查询returns正确结果。
当我 运行 使用 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 是帮助创建所需 ADO.NET 对象的 PowerShell 函数。 table 填充了我想要的列元数据,但 XEvents 中未显示 SELECT 语句。
无法复制。
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)。
如果您将参数绑定到 SqlCommand 中,它将作为 RPC 调用而不是批处理调用发送,并且事件会有点不同 rpc/sp 而不是 batch/sql。
rpc_completed/sp_statement_completed
而不是
sql_batch_completed/sql_statement_completed
我使用 PowerShell 中的 ADO.Net SqlAdapter 向 SQL 服务器发送了一个查询。查询returns正确结果。 当我 运行 使用 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 是帮助创建所需 ADO.NET 对象的 PowerShell 函数。 table 填充了我想要的列元数据,但 XEvents 中未显示 SELECT 语句。
无法复制。
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)。
如果您将参数绑定到 SqlCommand 中,它将作为 RPC 调用而不是批处理调用发送,并且事件会有点不同 rpc/sp 而不是 batch/sql。
rpc_completed/sp_statement_completed
而不是
sql_batch_completed/sql_statement_completed