使用 SMO 添加/删除链接服务器





2.00/5 (5投票s)
2006年1月31日
1分钟阅读

34094
使用 SQL Server 2005 SMO 添加/删除链接服务器
引言
我之前使用 SQLDMO for SQL 2000 获取基本信息。但是使用 SQL Server 2005 时,我们无法使用 SQLDMO。我需要这个功能用于我的项目,并且我们正在迁移到 SQL Server 2005。我在 Google 上搜索了使用 Microsoft 的 SMO(服务器管理对象)的如何添加链接服务器。这是 SQLDMO 的下一代产品。我找不到任何关于添加、删除或加载链接服务器的示例,所以我做了一些研究,Google 和 MSDN 搜索... 最后我成功了,并认为其他人也可能在寻找相同的东西。希望这能帮助他们。
以下代码可以为 SQL 2000 和 SQL 2005 添加、删除和加载链接服务器。
您需要添加对 Microsoft.sqlServer.ConnectionInfo、Microsoft.SqlServer.SMO 的引用
public bool AddLinkServer(string SourceServer, string DestinationServer,string UID,string PWD)
{
try
{
LinkedServer DestSrv;
ServerConnection SrvConn = new ServerConnection();
SrvConn.ServerInstance = SourceServer;
if ((UID == "") && (PWD == ""))
{
SrvConn.LoginSecure = true;
}
else
{
SrvConn.LoginSecure = false;
SrvConn.Login = UID;
SrvConn.Password = PWD;
}
Server SQLServer = new Server(SrvConn);
DestSrv = new LinkedServer(SQLServer, DestinationServer);
// 添加用于链接的远程用户/密码。
LinkedServerLogin LnkLogin = new LinkedServerLogin(DestSrv, UID);
if (!SrvConn.LoginSecure)
{
LnkLogin.RemoteUser = UID;
LnkLogin.SetRemotePassword(PWD);
LnkLogin.Create();
}
DestSrv.Create();
SrvConn.Disconnect();
return true;
}
catch
{
return false;
}
}
// 删除链接服务器...
public bool DropLinkServer(string SourceServer,string DropLinkServerName)
{
try
{
ServerConnection SrvConn = new ServerConnection();
SrvConn.ServerInstance = SourceServer;
SrvConn.LoginSecure = true;
Server SQLServer = new Server(SrvConn);
LinkedServerCollection LnkServerList = SQLServer.LinkedServers;
foreach (LinkedServer Lnk in LnkServerList)
{
if (Lnk.Name == DropLinkServerName)
{
Lnk.Drop(true);
break;
}
}
SrvConn.Disconnect();
return true;
}
catch
{
return false;
}
}
// 加载所有链接服务器...
public bool LoadLinkServers(string SourceServer, ArrayList LinkServerList)
{
try
{
ServerConnection SrvConn = new ServerConnection();
SrvConn.ServerInstance = SourceServer;
SrvConn.LoginSecure = true;
Server SQLServer = new Server(SrvConn);
LinkedServerCollection LnkSrvList = SQLServer.LinkedServers;
foreach (LinkedServer Lnk in LnkSrvList)
{
LinkServerList.Add(Lnk.Name);
}
SrvConn.Disconnect();
return true;
}
catch
{
return false;
}
}