2013-03-12 10 views
8

Ich versuche, die SMO für Sql Server 2008 R2 Standard zu verwenden, aber ich bekomme ein Problem, wenn ich versuche, ein Objekt Dump.Verwenden von LinqPad mit SMO

Error

der entsprechende Code:

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

Edit:

A Arbeit um, dass ich die Dump Verfahren mit einer festen Rekursionstiefe zu verwenden ist gefunden z.B Dump(1), aber die Ausnahme ist für jedes Objekt auf einer anderen Ebene.

Antwort

4

Was passiert, ist, dass der Aufruf von GetEnumerator auf einer der SMO-Objekteigenschaften eine Ausnahme auslöst und LINQPad reagiert, indem nur diese Ausnahme und nicht der Rest des Objektdiagramms gedumpt wird.

Ich halte dies für einen Fehler in LINQPad und so habe es für den nächsten Beta-Build behoben.

Aber auch mit dieser behoben, werden Sie finden, dass Aufruf von Dump() auf einem SMO-Objekt für immer dauern wird, weil es so viele Eigenschaften hat, die Ewigkeiten dauern, um aufzuzählen. Daher müssen Sie entweder die Rekursionstiefe begrenzen oder Dump (true) aufrufen, was dem Klicken auf die Schaltfläche "Results to DataGrids" entspricht. Durch das Dumping von Ergebnissen in Datengrids wird das Problem vermieden, da die Grids Daten träge wiedergeben.