Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取本地sql server的实例名称_C#_Sql Server 2008 - Fatal编程技术网

C# 获取本地sql server的实例名称

C# 获取本地sql server的实例名称,c#,sql-server-2008,C#,Sql Server 2008,我完全不知道如何获取本地sql server实例。我只收到服务器名。以下是我尝试过的不同方法: DataTable availableServers = SmoApplication.EnumAvailableSqlServers([All of the 3 inputs]); foreach (DataRow serverRow in availableServers.Rows) { // foreach row list "Name", "Server", "Instance" e

我完全不知道如何获取本地sql server实例。我只收到服务器名。以下是我尝试过的不同方法:

DataTable availableServers = SmoApplication.EnumAvailableSqlServers([All of the 3 inputs]);
foreach (DataRow serverRow in availableServers.Rows)
{
     // foreach row list "Name", "Server", "Instance" etc...
}

是否有其他方法可以获取本地sql server实例名称


我知道,在management studio中连接到SQL server时,“连接”对话框会将我的本地实例显示为。\sqlexpress或(本地)\sqlexpress。此外,在InstallShield中部署数据库安装时,InstallShield“定位sqlserver”对话框会为我的本地主机获取正确的实例。他们做得对吗?

发布的第二个代码示例已经到了一半。返回的DataTable将有4列(列集合)

服务器名 实例名 杂乱无章 版本

您可以通过枚举此集合来获取DataTable中的值,如下所示

 foreach (System.Data.DataRow row in table.Rows)
{
  foreach (System.Data.DataColumn col in table.Columns)
  {
    Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
  }     
}
你可以用

  • 通过键入“主机名”,在cmd中搜索您的计算机名
  • 在运行中键入“Services.msc”,以访问windows服务
  • 在服务中使用“sql server(…)”、“sql server代理(…)”和“sql server浏览器(…)”运行服务的服务中进行搜索,如果这些服务未运行,则右键单击并启动它们
  • 在服务列表中,检查“sql server(…)”括号中写入的名称,例如“sql server(XYZ)”,因此实例的名称为“XYZ”
  • 转到sql server配置管理器>sql server网络配置>协议…>TCP/IP(使其启用)
  • 之后,现在再次转到您的服务并重新启动sql server的服务
  • 现在,如果您的计算机名为“ABC”,实例为“XYZ”,请尝试使用windows身份验证连接“ABC\XYZ”[如果您尚未配置sql身份验证]
  • 如果你有任何问题,然后请发回,我会给它一个更详细的版本

  • 我留下这些台词是因为我只想展示我使用的技术。问题在于InstanceName是空的。请检查防火墙和SQL Server浏览器服务。请参阅,无法按我希望的方式修改防火墙。用ManagedComputer解决了这个问题。不管怎样,谢谢你的回复。太好了,想在你的专栏文章中发布这个方法吗?这是我在问题中展示的第三次尝试。名称为空。可能是配置问题。我假设实例在同一台机器上?你试过设置吗?mc.ConnectionSettings.ProviderArchitecture=ProviderArchitecture.xxx非常感谢!必须设置ProviderArchitecture.use64位
    ManagedComputer mc = new ManagedComputer();
    ServerInstance instance = mc.ServerInstances;
    
     foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }     
    }
    
    using Microsoft.SqlServer.Management.Smo.Wmi;
    ....
    
    ManagedComputer mc = new ManagedComputer();
    
    foreach (ServerInstance si in mc.ServerInstances)
    {
         Console.WriteLine("The installed instance name is " + si.Name);
    }