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

如何将SMO(SQL Server管理对象)与OLEDB驱动MSOLEDBSQL/MSOLEDBSQL19配合使用?

解决SMO使用MSOLEDBSQL19替代SQLNCLI的问题

问题根源

你的脚本直接将OleDbConnection实例传入ServerConnection,这并非SMO推荐的用法,导致连接未正确初始化,进而$Master为null。SMO的ServerConnection对OLE DB连接的处理需要显式指定驱动,而非直接传递已创建的OleDbConnection对象。

正确实现步骤

  1. 确保依赖环境就绪

    • 安装最新版的MSOLEDBSQL19驱动
    • 使用最新版的SMO组件(建议通过NuGet安装Microsoft.SqlServer.SqlManagementObjects,避免旧版本对旧驱动的依赖)
  2. 调整PowerShell脚本
    不要直接创建OleDbConnection,而是通过ServerConnection的连接字符串和Provider属性来指定使用MSOLEDBSQL19:

    # 构建连接字符串,指定MSOLEDBSQL19驱动
    $connectionString = "Data Source=myServer;Initial Catalog=myDB;Provider=MSOLEDBSQL19;Persist Security Info=False;Auto Translate=False;Encrypt=true;TrustServerCertificate=false;Connection Timeout=600;Integrated Security=SSPI;"
    
    # 创建ServerConnection并设置Provider和连接字符串
    $serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
    $serverConnection.ConnectionString = $connectionString
    $serverConnection.ProviderName = "MSOLEDBSQL19"
    
    # 初始化SMO Server对象
    $sqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server $serverConnection
    
    # 验证连接(可选,确保连接成功)
    $sqlServer.ConnectionContext.Connect()
    
    # 获取master数据库
    $master = $sqlServer.Databases["master"]
    
    # 输出验证
    if ($master) {
        Write-Host "成功获取master数据库,名称:$($master.Name)"
    } else {
        Write-Host "获取master数据库失败,请检查连接配置"
    }
    

额外说明

  • SMO并未被弃用,微软仍在维护更新最新版本,新版本的SMO已支持MSOLEDBSQL系列驱动
  • 若仍遇到问题,检查以下几点:
    • 确认MSOLEDBSQL19驱动已正确安装,可通过ODBC数据源管理器查看
    • 确保PowerShell运行环境加载了正确版本的SMO程序集(避免版本冲突)
    • 验证连接字符串中的参数是否正确(如服务器名称、加密设置等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:42:11