TraceServer
クラスを介して.NETでトレースを作成しようとしています。私のコードは次のとおりです。
var connectionInfo = new SqlConnectionInfo
{
ServerName = @".\sqlexpress",
DatabaseName = "master",
UseIntegratedSecurity = true,
};
// note that at this point I can run a simple SELECT query
// using connectionInfo.ConnectionString
var server = new Microsoft.SqlServer.Management.Trace.TraceServer();
server.InitializeAsReader(
connectionInfo,
@"C:\users\chasemedallion\desktop\trace.tdf"
);
while (server.Read()) {
Console.WriteLine(server["TextData"]);
}
ただし、InitializeAsReader
次の例外で失敗します。
Microsoft.SqlServer.Management.Trace.SqlTraceException: オブジェクトをリーダーとして初期化できませんでした。---> System.Runtime.InteropServices.COMException
at ?A0x97257f7e.ProcessError(Int32 hr, UInt16* lpszMessage)
Microsoft.SqlServer.Management.Trace.CTraceControllerBase.InitSource(Boolean bReOpen)
at Microsoft.SqlServer.Management.Trace.CTraceObjectsRowsetController
Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader (ConnectionInfoBase serverConnInfo、String profileFileName) の .InitSource(Boolean bReOpen )--- 内部例外スタック トレースの終了 ---
Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader (ConnectionInfoBase serverConnInfo、文字列 profileFileName) で
何が原因でしょうか? この質問を見ましたが、サービスとして実行しておらず、ローカル アカウントにはデータベースへの管理者アクセス権があります (SQL Server プロファイラーを介してトレースを実行できます)。
または、.NET を介してプログラムでトレースを実行する別の方法があれば幸いです。ローカル サーバーだけでなくリモート サーバーにもアクセスできる必要があります (SQL Server プロファイラーのように)。