我一直在谷歌搜索并阅读这篇文章
这正是我在 VB.NET 中所需要的,但是我不擅长将这段代码翻译成 VB.NET 代码。因此,任何帮助将不胜感激。谢谢你。
注意:我使用的是 SQL Server 2005 和 Visual Basic 2008
我一直在谷歌搜索并阅读这篇文章
这正是我在 VB.NET 中所需要的,但是我不擅长将这段代码翻译成 VB.NET 代码。因此,任何帮助将不胜感激。谢谢你。
注意:我使用的是 SQL Server 2005 和 Visual Basic 2008
虽然这个问题最初的标题是关于检索 SQL Server 的安装路径,但我觉得它更多的是关于代码翻译问题(解决方案已经存在,只是语言不正确)。
但是后来我觉得原代码中的方法相当生硬。
Evan 为您提供了我认为是现有解决方案的可行翻译。但可能是执行此特定任务的一种更简单的方法 - 假设您只需要找到您已经连接到的实例的安装路径,并假设可以读取注册表的用户也将具有VIEW SERVER STATE
权限 - 是发出这个从您的程序中对 DMVsys.dm_os_loaded_modules
进行简单查询:
SELECT name
FROM sys.dm_os_loaded_modules
WHERE name LIKE '%sqlservr.exe';
这会给你这样的东西:
C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Binn\sqlservr.exe
您需要进行一些解析,具体取决于您所追求的内容(例如,您想停在MSSQL
,还是Binn
?),但这比阅读注册表或其他恕我直言的方法要容易得多。
我只是用了一个代码转换器......只有基本的东西需要改变..
Using sqlServerKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Microsoft SQL Server")
For Each subKeyName As String In sqlServerKey.GetSubKeyNames()
If subKeyName.StartsWith("MSSQL.") Then
Using instanceKey As RegistryKey = sqlServerKey.OpenSubKey(subKeyName)
Dim instanceName As String = instanceKey.GetValue("").ToString()
If instanceName = "MSSQLSERVER" Then
'say
Dim path__1 As String = instanceKey.OpenSubKey("Setup").GetValue("SQLBinRoot").ToString()
path__1 = Path.Combine(path__1, "sqlserver.exe")
Return path__1
End If
End Using
End If
Next
End Using
如果您只是阅读有关 C# 的快速文章,您会注意到字符串的声明方式不同,并且存在细微的语法差异,例如foreach
vsfor each
您可以在此处阅读一些更常见的差异。
我使用了一个非常好的(离线)工具,叫做Convert .NET Free
这是最新版本的直接链接(截至 2014 年 4 月 19 日)大小: 2.06MB,文件:Zip:
希望这有一些用处;)
PS这个软件需要.NET Framework 4.5。
这几乎永远不会失败!:) 祝你好运