在.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
新聞熱點
疑難解答