【问题标题】:How to get SQL Server process ID with C#如何使用 C# 获取 SQL Server 进程 ID
【发布时间】:2013-05-24 04:06:53
【问题描述】:

在我的 Windows Server 2008 上,我有 SQL Server 2008(或更高版本的 2012)的本地实例。服务器还配置了 IIS,以运行连接到该 SQL 服务器的 ASP.NET Web 应用程序来执行基本的 SELECT、INSERT、UPDATE、删除操作。

我还有一个用 C# 编写的 Windows 服务应用程序,它在同一台服务器上运行。我想添加一个函数来检查 SQL Server 进程的 CPU 使用率。我可以知道它的 PID。

我的问题是,如何获取SQL Server进程的进程ID?

【问题讨论】:

    标签: c# .net sql-server sql-server-2008


    【解决方案1】:

    试试这个

    select SERVERPROPERTY('processid'),SERVERPROPERTY('productversion')
    

    您可以在任务管理器中检查如下

    【讨论】:

    • 这是一种非常酷的查找 PID 的方法。谢谢。我检查了一下,它适用于我的本地 SQL Server 安装。只是好奇,如果 SQL Server 没有安装在同一台机器上会发生什么?
    • 通过上面的查询,可以得到远程连接的sql server的PID,但是如果本地机器上没有安装sql server,就看不到远程连接的sql server的PID在本地机器上的任务管理器进程中
    • @Sagarpatel:谢谢。还刚刚发现执行SELECT SERVERPROPERTY('MachineName'); 将返回我可以从C# 与Environment.MachineName 进行比较的机器名称。
    • @Sagarpatel:我会的。我需要先在我的实际代码中对其进行测试。谢谢。
    【解决方案2】:

    只需使用Process.GetProcessesByName Method 而不是PID。

    【讨论】:

    • 是的,但我怎么知道进程名称?
    • 是sqlservr.exe。顺便说一句,你看过这篇文章了吗:sqldbadiaries.com/2011/01/04/…
    • 不,我没有。谢谢。只是好奇,为什么会同时运行多个 sqlservr.exe?
    【解决方案3】:
    using System.Diagnostics;   //at the top of your class
    
    
    Process[] processlist = Process.GetProcesses();
    foreach(Process theprocess in processlist){
    Console.WriteLine(“Process: {0} ID: {1}”, theprocess.ProcessName, theprocess.Id);
    }
    

    希望这能让你开始。

    【讨论】:

      【解决方案4】:

      在 C# 中获取 SQL Server 实例的进程 ID

      var ProcessId = Process.GetProcesses()
                              .Where(P => P.ProcessName == "sqlservr")
                              .Select(P => P.Id);
      

      【讨论】:

      • FirstOrDefault 在这种情况下不是最佳选择。机器上可能有更多的 sql server 实例
      • 是的,这是真的。我会修改我的答案。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2020-05-05
      • 2020-11-03
      • 2022-07-19
      • 2014-08-31
      • 2013-02-28
      相关资源
      最近更新 更多