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)
at Microsoft.SqlServer.Management.Trace.CTraceControllerBase.InitSource(Boolean bReOpen)
at Microsoft.SqlServer.Management.Trace.CTraceObjectsRowsetController Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader 处的.InitSource(布尔 bReOpen)
(ConnectionInfoBase serverConnInfo,字符串 profileFileName)

--- 内部异常堆栈跟踪结束 ---

在 Microsoft.SqlServer.Management.Trace.TraceServer.InitializeAsReader(ConnectionInfoBase serverConnInfo,字符串 profileFileName)

这可能是什么原因造成的?我查看了这个问题,但我没有作为服务运行,并且我的本地帐户对数据库具有管理员访问权限(我可以通过 SQL Server 探查器运行跟踪)。

或者,我会对通过 .NET 以编程方式运行跟踪的另一种方式感到满意。我需要能够访问本地和远程服务器(就像 SQL Server profiler 一样)。

4

0 回答 0