1

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 プロファイラーのように)。

4

0 に答える 0