在开发基于SQL Server数据库的应用程序时经常会遇到需要知道SQL Server数据库对象的相关信息的情况例如SQL Server中有哪些数据库这些数据库中有哪些数据表每个数据表有哪些字段这些字段是什么属性等笔者在开发一个数据库导入程序时就遇到了这些问题经过一番摸索较好地解决了上述问题现在把实现方法介绍给大家程序界面如下图所示
开发环境
本文所列出的代码在Windows NT (SP)Microsoft Visual Basic Microsoft SQL Server 环境下调试通过
实现思想
利用SQLDMO(分布式管理对象)来访问SQL Server数据库SQLDMO是为Windows x与 Windows NT提供的位OLE对象它为与OLE兼容的应用程序提供了SQL Server管理功能的接口开发者通过DMO就可以直接访问SQL Server数据对象
实现代码
在菜单>工程>引用里选中Microsoft SQLDMO Object Library
在代码中定义以下全局变量
Public oSQLServer As SQLDMOSQLServer
定义一个SQLDMOSQLServer对象
Public oCurrentDB As SQLDMODatabase
定义一个SQLDMODatabase 对象
Public oCurrentTable As SQLDMOTable
定义一个SQLDMOTable 对象
Public SERVER_NAME As String
用于获得用户输入的SQL Server服务器名称
Public USERNAME As String
用于获得用户输入的用户名
Public PASSWORD As String
用于获得用户输入的密码
以下为部分关键的程序代码
Private Sub cmd_link_Click() 点击连接按钮
Set oSQLServer = CreateObject(SQLDMOSQLServer)
oSQLServerConnect SERVER_NAME USERNAME PASSWORD
连接SQL Server服务器SERVER_NAME 为服务器名USERNAME为用户名PASSWORD为用户口令
FillEmptyDatabaseList (True)
If cob_sqldbListCount > Then
cob_sqldbListIndex =
Cob_sqldb_Click
End If
End Sub
Private Sub FillEmptyDatabaseList(bFill As Boolean)
获得SQL Server服务器上的所有数据库名称
If bFill = True Then
Dim oDB As SQLDMODatabase
Set oDB = New SQLDMODatabase
For Each oDB In oSQLServerDatabases
If oDBSystemObject = False Then
判断其不是系统数据库
cob_sqldbAddItem oDBName
把非系统数据库名称添加到数据库信息列表框中
End If
Next oDB
End If
End Sub
Private Sub Cob_sqldb_Click()
点击数据库信息列表框
Dim oDB As SQLDMODatabase
Set oDB = oSQLServerDatabases(cob_sqldbList(cob_sqldbListIndex))
If oCurrentDB Is Nothing Then
Set oCurrentDB = oDB
Else
If oCurrentDBName = oDBName Then
Exit Sub
End If
Set oCurrentDB = Nothing
Set oCurrentDB = oDB
End If
FillEmptyTableList (True)
If cob_sqltableListCount > Then
cob_sqltableListIndex =
cob_sqltable_Click
End If
End Sub
Private Sub FillEmptyTableList(bFill As Boolean)
获得当前数据库中的所有非系统数据表名称
If bFill = True Then
Dim oTable As SQLDMOTable
For Each oTable In oCurrentDBTables
If oTableSystemObject = False Then
判断其不是系统数据表
cob_sqltableAddItem oTableName
把非系统数据表名称添加到数据表信息列表框中
End If
Next oTable
End If
End Sub
Private Sub cob_sqltable_Click()
点击数据表信息 列表框
Dim oTable As SQLDMOTable
Set oTable = oCurrentDBTables(cob_sqltableList(cob_sqltableListIndex))
If oCurrentTable Is Nothing Then
Set oCurrentTable = oTable
Else
If oCurrentTableName = oTableName Then
Exit Sub
End If
Set oCurrentTable = Nothing
Set oCurrentTable = oTable
End If
FillEmptyColsToIndex (True)
If cob_sqlrecordListCount > Then
cob_sqlrecordListIndex =
End If
End Sub
Private Sub FillEmptyColsToIndex(bFill As Boolean)
获得数据表中的所有字段的信息
If bFill = True Then
Dim oCol As SQLDMOColumn
Set oCol = New SQLDMOColumn
For Each oCol In oCurrentTableColumns
cob_sqlrecordAddItem oColName & & oColDataType
把字段名称和字段属性添加到字段信息列表框中
Next oCol
End If
End Sub