【问题标题】:Using LinqPad with SMO将 LinqPad 与 SMO 一起使用
【发布时间】:2013-02-28 00:14:15
【问题描述】:

我正在尝试将 SMO 用于 Sql Server 2008 R2 Standard,但每当我尝试 Dump 一个对象时都会遇到问题。

相关代码:

void Main()
{
    var connectionString = @"Server=(local);Trusted_Connection=True;";
    Server server = new Server(new ServerConnection(new SqlConnection(connectionString)));
    server.ConnectionContext.Connect();     

    server.Dump(); //Error      

    Database database = new Database(server, "master");
    database.Refresh();

    database.Dump(); // Error

    IEnumerable<Table> tables = database.Tables.Cast<Table>();

    tables.Dump(); //Error
}

编辑:

我发现的一种解决方法是使用具有固定递归深度的 Dump 方法,例如Dump(1),但每个对象的异常级别不同。

【问题讨论】:

    标签: c# sql-server-2008-r2 smo linqpad


    【解决方案1】:

    发生的情况是,在 SMO 对象属性之一上调用 GetEnumerator 的行为会引发异常,LINQPad 会通过仅转储该异常而不是对象图的其余部分来响应。

    我认为这是 LINQPad 中的一个错误,因此已在下一个 beta 版本中修复它。

    但是,即使修复了这个问题,您也会发现在 SMO 对象上调用 Dump() 将需要很长时间,因为它有很多属性需要很长时间才能枚举。因此,您必须限制递归深度,或者调用 Dump(true),这相当于单击“Results to DataGrids”按钮。将结果转储到数据网格可以避免这个问题,因为网格会延迟渲染数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多