You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# .NET类创建SQL链接服务器遇问题求助

使用SMO创建SQL链接服务器的解决方案

解决"you must set Parent property"错误

LinkedServer是SMO(SQL Server Management Objects)的层级对象,必须将其Parent属性绑定到一个Server实例,否则会触发该错误。Server实例代表你要创建链接服务器的本地SQL Server实例。

完整代码示例

首先确保项目引用以下SMO程序集:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

// 1. 创建Server实例,连接到目标SQL Server
Server localServer = new Server(new ServerConnection("localhost"));

// 2. 实例化LinkedServer并绑定Parent
LinkedServer linkedServer = new LinkedServer(localServer, "MyLinkedServer");

// 3. 配置链接服务器基础属性(以SQL Server为例)
linkedServer.ProductName = "SQL Server";
linkedServer.ProviderName = "SQLNCLI11"; // 可根据驱动调整,如MSOLEDBSQL、SQLNCLI10等
linkedServer.DataSource = "REMOTE_SERVER\\INSTANCE"; // 远程服务器地址

// 4. 配置认证模式与登录映射
// 场景1:Windows身份验证(本地登录模拟Windows身份访问远程)
LinkedServerLogin windowsLogin = new LinkedServerLogin(linkedServer, "DOMAIN\\LocalUser");
windowsLogin.Impersonate = true;
windowsLogin.Create();

// 场景2:SQL Server身份验证(指定远程登录账号)
LinkedServerLogin sqlLogin = new LinkedServerLogin(linkedServer, "LocalSqlUser");
sqlLogin.Impersonate = false;
sqlLogin.RemoteUser = "RemoteSqlUser";
sqlLogin.RemotePassword = "RemotePassword";
sqlLogin.Create();

// 5. 创建链接服务器
linkedServer.Create();

关键属性说明

  • Parent:必须赋值为目标Server实例,这是SMO对象模型的强制要求,用于确定链接服务器所属的SQL Server实例。
  • ProviderName:指定连接远程数据源的OLE DB驱动名称,不同数据源对应不同值(如Oracle用OraOLEDB.Oracle,MySQL用MySQL ODBC 8.0 Unicode Driver)。
  • LinkedServerLogins:用于映射本地登录到远程服务器的登录账号:
    • Windows身份验证:设置Impersonate = true,无需指定远程账号。
    • SQL Server身份验证:设置Impersonate = false,并指定RemoteUser和RemotePassword。

内容的提问来源于stack exchange,提问作者JPJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:45:43