我正在尝试通过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 一样)。