本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 .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();
}
}