代码之家  ›  专栏  ›  技术社区  ›  Eseosa Omoregie

无法从“系统”转换。数据。SqlClient。“连接到”Microsoft。SqlServer。管理。普通。IRenewableToken

  •  0
  • Eseosa Omoregie  · 技术社区  · 4 年前

    我目前正在创建具有各种方法的SQLWorker类,这些方法作为更广泛框架的一部分执行各种sql命令。我有一个用于执行sql脚本的方法。如下图所示:

    public object ExecuteScript(string sql, ExecutionType executionType = ExecutionType.NonQuery,
            int statementTimeout = 1800)
        {
    
            using (var connection = new SqlConnection(ConnectionString))
            {
                connection.InfoMessage += (sender, args) =>
                    _infoMessageText.AppendLine(args.Message);
    
                var server = new Server(new ServerConnection(connection));
                server.ConnectionContext.StatementTimeout = statementTimeout;
                switch (executionType)
                {
                    case ExecutionType.NonQuery:
                        return server.ConnectionContext.ExecuteNonQuery(sql);
                    case ExecutionType.Scalar:
                        return server.ConnectionContext.ExecuteScalar(sql);
                    case ExecutionType.Reader:
                        return server.ConnectionContext.ExecuteReader(sql);
                }
            }
            return null;
        }
    

    我目前遇到了错误: 参数1:无法从“System”转换。数据。SqlClient。“连接到”Microsoft。SqlServer。管理。普通。IRenewableToken

    具体线路是

     var server = new Server(new ServerConnection(connection));
    

    ServerConnection类似乎需要一个IRenewableToken参数,但它有一个接受SqlConnection参数的构造函数。

    我不确定我错过了什么,我相信我有正确的NugetPackages,并且有以下使用语句

    using Microsoft.SqlServer.Management.Common;
    using Microsoft.SqlServer.Management.Smo;
    

    你知道我在这里错过了什么吗?

    0 回复  |  直到 4 年前
        1
  •  6
  •   Eseosa Omoregie    4 年前

    通过将using语句从using System更改为using语句,解决了这个问题。数据。SqlClient到Microsoft。数据。SqlClient。我正在重构旧版本的代码,他们使用的是旧版本的微软。SQL Server。Management.objects与System一起提供nuget包。数据。SqlClient。使用最新版本的Microsoft。SQL Server。管理层反对它不起作用。