我在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列表