本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用适用于 .NET 的 X-Ray 开发工具包跟踪 SQL 查询
适用于 .NET 的 X-Ray 开发工具包为 System.Data.SqlClient.SqlCommand
提供了名为 TraceableSqlCommand
的包装程序类,您可以用来代替 SqlCommand
。您可以使用 TraceableSqlCommand
类初始化 SQL 命令。
使用同步和异步方法跟踪 SQL 查询
以下示例显示如何使用 TraceableSqlCommand
来同步和异步自动跟踪 SQL Server 查询。
例 Controller.cs
- SQL 客户端检测(异步)
using Amazon;
using Amazon.Util;
using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Handlers.SqlServer;
private void QuerySql(int id)
{
var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"];
using (var sqlConnection = new SqlConnection(connectionString))
using (var sqlCommand = new TraceableSqlCommand("SELECT " + id, sqlConnection))
{
sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
}
}
您可以使用 ExecuteReaderAsync
方法异步执行查询。
例 Controller.cs
- SQL 客户端检测(异步)
using Amazon;
using Amazon.Util;
using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Handlers.SqlServer;
private void QuerySql(int id)
{
var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"];
using (var sqlConnection = new SqlConnection(connectionString))
using (var sqlCommand = new TraceableSqlCommand("SELECT " + id, sqlConnection))
{
await sqlCommand.ExecuteReaderAsync();
}
}
收集对 SQL Server 执行的 SQL 查询
您可以启用 SqlCommand.CommandText
的捕获作为 SQL 查询创建的子分段的一部分。SqlCommand.CommandText
显示为子分段 JSON 中的字段 sanitized_query
。默认情况下,出于安全考虑,此功能处于禁用状态。
注意
如果您在 SQL 查询中以明文形式包含敏感信息,请不要启用收集功能。
可以通过下列两种方式启用 SQL 查询:
-
在应用程序全局配置中将
CollectSqlQueries
属性设置为true
。 -
将
TraceableSqlCommand
实例中的collectSqlQueries
参数设置为true
以收集该实例中的调用。
启用全局 CollectSqlQueries 属性
以下示例显示如何为 .NET 和 .NET Core 启用 CollectSqlQueries
属性。
启用 collectSqlQueries 参数
您可以在 TraceableSqlCommand
实例中将 collectSqlQueries
参数设置为 true
,以收集使用该实例进行的 SQL Server 查询的 SQL 查询文本。将参数设置为 false
禁用 TraceableSqlCommand
实例的 CollectSqlQuery
功能。
注意
TraceableSqlCommand
实例中 collectSqlQueries
的值将覆盖 CollectSqlQueries
属性的全局配置中设置的值。
例 示例 Controller.cs
- 启用实例的 SQL 查询收集
using Amazon;
using Amazon.Util;
using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Handlers.SqlServer;
private void QuerySql(int id)
{
var connectionString = ConfigurationManager.AppSettings["RDS_CONNECTION_STRING"];
using (var sqlConnection = new SqlConnection(connectionString))
using (var command = new TraceableSqlCommand("SELECT " + id, sqlConnection, collectSqlQueries: true))
{
command.ExecuteNonQuery();
}
}