ADODB Connection.ConnectionString 属性不返回服务器名称



我在Excel VBA中使用ActiveX数据对象6.1库访问SQL Server 2012数据库。我可以连接并运行查询,但是一旦连接,似乎没有办法确定connection对象连接到哪个服务器,因为connectionString属性不返回用于打开连接的相同字符串:

Public Sub connectDB()
        Dim conn As New Connection
        Dim strServer As String, strDatabase As String, strUser As String, strPassword As String
        strServer = "****": strDatabase = "****": strUser = "****": strPassword = "****"
        conn.ConnectionString = "Driver={SQL Server};Server=" & strServer & ";Database=" & strDatabase & ";UID=" & strUser & ";PWD=" & strPassword
        Debug.Print conn.ConnectionString
        conn.Open
        Debug.Print conn.ConnectionString
End Sub

输出:

Driver={SQL Server};Server=****;Database=****;UID=****;PWD=****
Provider=MSDASQL.1;

换句话说,一旦连接打开,connectionString属性被重置为无用的东西。Connection.DefaultDatabase返回数据库,但是似乎没有办法从connection对象确定服务器。

如果我的代码在运行时传递了一个连接对象,那就很高兴能够看到它连接到哪个服务器,而不必执行sys.dm_exec_connections(这似乎是浪费资源,你需要相当高的权限来运行它)。有办法吗?

服务器名称(以及许多其他有趣的信息,包括DBMS版本,支持的功能,特殊字符等)是Connection对象的动态属性之一,通过Properties集合访问:

connection.Properties("Server Name").Value

返回服务器名称。对于ODBC驱动程序的Microsoft OLE DB Provider(可能还有其他),完整的连接字符串也在"Extended Properties"属性中。你可以这样列出属性:

Dim prop As Property
For Each prop In conn.Properties
    Debug.Print prop.Name, prop.Value
Next prop

对于任何给定的连接,您确切地获得哪些属性取决于您正在使用的提供程序-查看MSDN列表

相关内容

  • 没有找到相关文章

最新更新