使用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.dllMicrosoft.SqlServer.ConnectionInfo.dllMicrosoft.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。
- Windows身份验证:设置
内容的提问来源于stack exchange,提问作者JPJ
相关产品推荐
相关产品推荐

