gpt4 book ai didi

sql-server - 如何在 VBA 中枚举 LAN 上的 SQL Server 实例?

转载 作者:行者123 更新时间:2023-12-04 22:11:51 36 4
gpt4 key购买 nike

如何在 VBA 中枚举 LAN 上的 SQL Server 实例?
这是针对 Windows 10 上的 Microsoft Office 2019 的,服务​​器是 2008 年到 2019 年的各种版本。
我有一个 Excel 工作簿,它使用 VBA 中的 ADODB 2.8 在一个 SQL 实例上运行查询。我想扩展代码以对我们 LAN 上的任何实例运行查询。为此,我将添加一个表单和列表框来选择实例,但我找不到用实例名称填充列表框的代码的想法。
找到这些信息比我预期的要困难。我经常看到 SQLDMO 被提及,但是很多帖子和文章都是 15-20 年的,我在我的系统上找不到这个 DLL。
我可以在 VB.Net 中轻松地做到这一点,但在 VBA 中却是一个难以捉摸的答案。

Imports System.Data.Sql
Module Module1
Sub Main()
Dim instance As SqlDataSourceEnumerator = SqlDataSourceEnumerator.Instance
Dim table As System.Data.DataTable = instance.GetDataSources()
For Each row As DataRow In table.Rows
Console.WriteLine(row("ServerName") & "\" & row("InstanceName"))
Next
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub
End Module

最佳答案

编辑 我认为下面的代码无论如何都行不通,因为它似乎需要 CDecl调用约定。
SqlDataSourceEnumerator使用名为 sni.dll 的内部本地 DLL没有文档。
我已经在 VBA 中实现了这个,但我没有声称它的可靠性,因为它完全没有文档记录。
我什至无法测试它,因为我网络上唯一的 SQL Server 没有出现在 SqlDataSourceEnumerator 中任何一个。
您可能还需要获取 sni.dll 的确切位置。在您的机器上,您可能需要下载 Microsoft.Data.SqlClient.SNI NuGet 包。

Declare PtrSafe Function SNIServerEnumOpen Lib "sni.dll" (ByRef handle As LongPtr, ByVal dummy As Long) As LongPtr
Declare PtrSafe Sub SNIServerEnumClose Lib "sni.dll" (ByRef handle As LongPtr)
Declare PtrSafe Function SNIServerEnumRead Lib "sni.dll" (ByVal handle As LongPtr, ByVal buffer As String, ByVal bufferSize As Long, ByRef more As Long) As LongPtr

Function EnumDataSources() As String()
On Error GoTo finally
Dim buffer, strbldr As String
Dim bufferSize, readLength As Long
Dim handle As LongPtr
Dim more As Long
buffer = Space(1024)

SNIServerEnumOpen(handle, 0)
If handle = 0 Then GoTo finally
Do While more <> 0
readLength = SNIServerEnumRead(handle, buffer, 1024, more)
If readLength > bufferSize Then
Exit Do
ElseIf 0 < readLength Then
strbldr = strbldr & Mid(buffer, 0, readLength)
End If
Loop
finally:
If handle <> 0 Then SNIServerEnumClose (handle)

EnumDataSources = Split(strbldr, ChrW(0))
End Function

关于sql-server - 如何在 VBA 中枚举 LAN 上的 SQL Server 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72192799/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com