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

ServerConnection构造函数不接受SqlConnection并报CS1503错误的问题咨询

问题根因
  1. CS1503报错:你当前使用的SqlConnection属于System.Data.SqlClient命名空间,而SMO 160及以上版本的ServerConnection构造函数中,接受SqlConnection参数的重载,要求传入的是Microsoft.Data.SqlClient命名空间下的SqlConnection实例,两个命名空间下的类完全独立不兼容。编译器匹配不到对应重载时,会尝试匹配最近的可选重载,就出现了转换为IRenewableToken失败的错误提示。
  2. IDE无响应卡顿:你代码中定义的conn是SqlConnectionInfo类型,和SqlConnectionObject属性要求的SqlConnection类型完全不匹配,错误的类型赋值触发了Visual Studio静态代码检查的异常,进而导致IDE卡死。
修复步骤
  • 卸载项目中引用的System.Data.SqlClientNuGet包,安装官方最新的Microsoft.Data.SqlClient包
  • 代码中所有SqlConnection相关的引用,统一替换为Microsoft.Data.SqlClient命名空间下的实现
  • 修正类型不匹配问题,直接构造Microsoft.Data.SqlClient.SqlConnection实例传给ServerConnection构造函数即可,不需要额外使用SqlConnectionInfo
  • 异步备份操作不要提前关闭连接,避免备份过程中连接被释放导致任务失败
修正后代码
using Microsoft.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.Win32;
using System;
using System.Windows;
using System.Windows.Media.Animation;

// 你的业务逻辑代码内
SaveFileDialog sfd = new SaveFileDialog();
// 此处替换为你从配置中读取到的真实数据库连接字符串
string connString = @"你的真实数据库连接字符串";
sfd.Filter = "Database backup files (*.bak)|*.bak";
sfd.Title = "Create Database Backup";
sfd.FileName = DateTime.Today.ToString("ddMMMyyyy") + ".bak";

if (sfd.ShowDialog() == true)
{
    SqlConnection.ClearAllPools();
    using (SqlConnection conn = new SqlConnection(connString))
    {
        ServerConnection servConn = new ServerConnection(conn);
        try
        {
            servConn.Connect();
            Server serverdb = new Server(servConn);
            Backup backupdb = new Backup() 
            { 
                Action = BackupActionType.Database, 
                Database = "whdb" 
            };
            backupdb.Devices.AddDevice(sfd.FileName, DeviceType.File);
            backupdb.Initialize = true;
            backupdb.Incremental = false;
            // 如果需要同步执行避免后续逻辑提前执行,可换成SqlBackup方法
            backupdb.SqlBackupAsync(serverdb);
            
            Storyboard sb = Resources["sbHideAnimation"] as Storyboard;
            StatusLable.Content = @"اطلاعات صادر شد.";
            sb.Begin(StatusLable);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            if (servConn.IsOpen)
            {
                servConn.Disconnect();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:57:00