在.net framework中,能够很方便调用com组件,有些时候我们需要获得运行在某个sql server上得服务实例列表和在一个实例上得数据库列表,通过microsoft.sqldmo.object组件就可以轻松完成此项工作:
首先如何找到microsoft.sqldmo.object
1.如何在您得项目中能够使用sqldmo组件?
菜单-项目-添加引用-com-microsoft.sqldmo.object
2.将该功能写成一个类:
1using system;
2using system.collections;
3using system.collections.specialized;
4
5namespace 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
新闻热点
疑难解答