8

我正在尝试将 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),但每个对象的异常级别不同。

4

1 回答 1

4

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

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

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

于 2013-04-05T04:11:30.327 回答