在.Net FrameWork中,能够很方便调用COM组件,有些时候我们需要获得运行在某个Sql Server上得服务实例列表和在一个实例上得数据库列表,通过Microsoft.SQLDMO.Object组件就可以轻松完成此项工作:
首先如何找到Microsoft.SQLDMO.Object
1.如何在您得项目中能够使用SQLDMO组件?
菜单-项目-添加引用-COM-Microsoft.SQLDMO.Object
2.将该功能写成一个类:
1
using System;
2
using System.Collections;
3
using System.Collections.Specialized;
4
5
namespace JillZhang
6

{
7
/**//// <summary>
8
/// Summary description for SqlInfo.
9
/// </summary>
10
public class SqlInfo
11
{
12
成员变量#region 成员变量
13
private string _uid="";
14
private string _pwd="";
15
private StringCollection _serverList=new StringCollection();
16
private Hashtable _databaseList=new Hashtable();
17
#endregion
18
19
构造函数#region 构造函数
20
public SqlInfo()
21
{
22
this._serverList=GetSqlInstances();
23
if(this._serverList.Count>0)
24
{
25
foreach(string item in this._serverList)
26
{
27
this._databaseList.Add(item,this.GetAllDatabases(item));
28
}
29
}
30
}
31
public SqlInfo(string uid,string pwd)
32
{
33
this._uid=uid;
34
this._pwd=pwd;
35
this._serverList=GetSqlInstances();
36
if(this._serverList.Count>0)
37
{
38
foreach(string item in this._serverList)
39
{
40
this._databaseList.Add(item,this.GetAllDatabases(item));
41
}
42
}
43
}
44
#endregion
45
46
公共属性#region 公共属性
47
/**//// <summary>
48
/// 服务列表
49
/// </summary>
50
public StringCollection ServerList
51
{
52
get
53
{
54
return _serverList;
55
}
56
}
57
/**//// <summary>
58
/// 用于登录Sql server得用户名
59
/// </summary>
60
public string Uid
61
{
62
get
63
{
64
return _uid;
65
}
66
set
67
{
68
_uid=value;
69
}
70
}
71
/**//// <summary>
72
/// 用于登录得密码
73
/// </summary>
74
public string Pwd
75
{
76
get
77
{
78
return _pwd;
79
}
80
set
81
{
82
_pwd=value;
83
}
84
}
85
#endregion
86
87
事件方法#region 事件方法
88
/**//// <summary>
89
/// 获得服务列表
90
/// </summary>
91
/// <returns></returns>
92
public static System.Collections.Specialized.StringCollection GetSqlInstances()
93
{
94
//声明一个字符串链表,用于存放列表信息
95
System.Collections.Specialized.StringCollection instaces= new System.Collections.Specialized.StringCollection();
96
try
97
{
98
//以下代码是通过调用SQLDMO组件来实现获得服务列表
99
SQLDMO.Application sqlApplication= new SQLDMO.ApplicationClass();
100
SQLDMO.NameList sqlServerIntances=sqlApplication.ListAvailableSQLServers();
101
for(int i=0;i<sqlServerIntances.Count;i++)
102
{
103
object svr=sqlServerIntances.Item(i+1);//索引从1开始
104
if(svr!=null)
105
{
106
instaces.Add(svr.ToString());
107
}
108
}
109
return instaces;
110
}
111
catch
112
{
113
throw new Exception("未能获得Server得列表信息,请查看您得Sql server是否正在运行!");
114
}
115
}
116
117
/**//// <summary>
118
/// 获得Sqlserver 2000一个Server Instance上得数据库列表
119
/// </summary>
120
/// <param name="server">服务名称</param>
121
/// <param name="uid">登录用户</param>
122
/// <param name="pwd">登录密码</param>
123
/// <returns>数据库列表</returns>
124
public static System.Collections.Specialized.StringCollection GetAllDatabases(string server,string uid,string pwd)
125
{
126
System.Collections.Specialized.StringCollection databases= new System.Collections.Specialized.StringCollection();
127
try
128
{
129
SQLDMO.SQLServer sqlServer =new SQLDMO.SQLServerClass();
130
sqlServer.Connect(server,uid,pwd);
131
foreach(SQLDMO.Database db in sqlServer.Databases)
132
{
133
if(db.Name!=null)
134
{
135
databases.Add(db.Name);
136
}
137
}
138
return databases;
139
}
140
catch
141
{
142
throw new Exception("未能获得服务"+server+"上得数据库列表,可能您得服务器没有启动或者您得用户名或密码错误");
143
}
144
}
145
public System.Collections.Specialized.StringCollection GetAllDatabases(string server)
146
{
147
return GetAllDatabases(server,this._uid,this._pwd);
148
}
149
#endregion
150
151
}
152
}
153

2

3

4

5

6



7


8

9

10

11



12


13

14

15

16

17

18

19


20

21



22

23

24



25

26



27

28

29

30

31

32



33

34

35

36

37



38

39



40

41

42

43

44

45

46


47


48

49

50

51



52

53



54

55

56

57


58

59

60

61



62

63



64

65

66

67



68

69

70

71


72

73

74

75



76

77



78

79

80

81



82

83

84

85

86

87


88


89

90

91

92

93



94

95

96

97



98

99

100

101

102



103

104

105



106

107

108

109

110

111

112



113

114

115

116

117


118

119

120

121

122

123

124

125



126

127

128



129

130

131

132



133

134



135

136

137

138

139

140

141



142

143

144

145

146



147

148

149

150

151

152

153
