2014-02-15 90 views
1

有人知道如何从SQL连接字符串中提取机器名称吗? 例如,对于下面的连接字符串,当机器“ighost”,其IP地址为190.190.200.100上运行的应用程序/脚本:从连接字符串中提取机器名称

"Server=ighost;Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=(local);Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=.\SqlExpress;Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=190.190.200.100,1433;Database=myDataBase;User Id=myUsername;Password=myPassword;" 

我希望得到的结果,只是机器名称:

ighost 

这难道不是一个问题,因为上面我不问如何解析连接字符串,而是如何找到即使连接字符串服务器属性中包含这样的值(本地),本地主机,ip地址的服务器的机器名的重复,点。

+0

做ighost,(本地),。\ SqlExpress和190.190.200.100,1433是指同一台服务器吗? – wdosanjos

+0

是的,它们是一样的 – Ievgen

回答

1

如果这些连接字符串指的是同一个服务器,可靠地找出机器名的唯一方法是连接到服务器并运行以下命令:

select @@SERVERNAME 

示例代码:

using (var cn = new SqlConnection(yourConnectionString)) 
{ 
    cn.Open(); 

    using (var cmd = new SqlCommand("Select @@SERVERNAME", cn)) 
    { 
     Console.WriteLine(cmd.ExecuteScalar()); 
    } 
} 
+0

这种方法对我来说的问题是用户需要访问数据库。例如,如果使用Windows身份验证,并且我运行脚本/ exe的用户对数据库没有权限,则这不起作用。我需要解析服务器名称而不连接到服务器。 – Ievgen

+0

如果用户无权访问数据库,为什么需要首先验证连接字符串? – wdosanjos

+0

1.我不需要验证连接字符串,我需要从连接字符串中获取机器名称。 2.我的脚本将在NT系统帐户或其他帐户下运行,并将从不同来源获取连接字符串。使用此连接字符串的实际应用程序可能运行在不同的帐户 – Ievgen

相关问题