c# - 将 LinqPad 与 SMO 结合使用

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

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

Error

相关代码:

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
}

Assemblies Includes

编辑:

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

最佳答案

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

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

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

关于c# - 将 LinqPad 与 SMO 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361970/

相关文章:

c# - 添加透明水印(png)图像到另一图像

c# - 转向行为 : Why is my wandering algorithm not working as intended?

sql - 在不带子查询的 HAVING 子句中按 RANK() 进行过滤

tsql - 如何编写查询来获取上周的记录

sql - 单个变量由存储过程中的字符数组成?

c# - 使用 SMO.Agent 检索 SQL 作业执行状态 - 安全问题

c# - 创建数据库命令失败

c# 使用数据库中的数据生成 INSERT 脚本

c# - .net 并行和串行循环

c# - 如何知道 DateTime 是否在 C# 中的 DateRange 之间