2009-03-17 9 views
4

Ich versuche, einen vorhandenen C# -Code in eine CLR-gespeicherte Prozedur zu konvertieren. Die offensichtliche zu verwendende Verbindungszeichenfolge ist eine Kontextverbindung ("context connection = true").Welche Einschränkungen gibt es bei einer CLR-Kontextverbindung?

Das Problem, in das ich renne, ist einige Dinge, die anscheinend nicht auf diesem Verbindungstyp funktionieren. Die neueste Sache ist die SqlConnection.GetSchema-Methode schlägt fehl. Der Fehler besagt nur, dass es für eine Kontextverbindung nicht verfügbar ist. Gibt es irgendwo eine Liste von Dingen, die bei einer Kontextverbindung nicht funktionieren?

+0

Können Sie die Ausnahme einfügen und die Ablaufverfolgung stapeln? – Kev

+0

Ich könnte, aber ich suche nicht nach Hilfe mit diesem spezifischen Fehler. Die Nachricht ist sehr klar. Es funktioniert nicht mit einer Kontextverbindung. Was ich nicht finden kann, ist ein Grund, warum es nicht funktioniert oder eine Liste von anderen Dingen, die möglicherweise nicht funktionieren. –

Antwort

4

Sie könnten bereits über diesen in den MSDN SQL Server 2008 Books Online gekommen sind, jedoch der folgende Link erklärt die Einschränkungen beim Context-Verbindungen mit:

Restrictions on Regular and Context Connections

Wenn Sie die vollständige Ausnahme und Stapel Post Trace Dann kann es möglich sein, aus den .NET-FX-Assemblies (mit .NET Reflector) oder denen, die mit SQL 2005/2008 implementiert wurden, herauszufinden, warum diese Ausnahme ausgelöst wird.

+0

Danke, dass der Link hilfreich war. Ich habe die Stack-Trace nicht griffbereit. Ich rufe gerade DataTable tbl = dbcon.GetSchema ("Tabellen"); und es schlägt fehl, dass es in einer Kontextverbindung nicht erlaubt ist. –

+0

Ich bin nicht wirklich auf der Suche nach Hilfe auf den spezifischen Fehler nur mehr Informationen darüber, was sonst nicht funktionieren könnte. –

1

Nach etwas mehr Suche fand ich diese Liste von Dingen, die nicht mit einer Kontextverbindung funktionieren here. Einige davon sind auch im obigen Link zu den SQL-Büchern dokumentiert, sie werden jedoch nicht alle erwähnt.

Dinge, die nicht mit einer Kontextverbindung funktionieren.

  • Change Methode
  • GetSchema Methode
  • Verbindungspooling und die zugehörigen Parameter und Methoden
  • Transparent Failover, wenn Datenbankspiegelung verwendet wird
  • Client-Statistiken Packet, WorkstationID und andere Kundeninformationen
2

Jemand könnte dies nützlich finden:

System.Data.DataTable schema = null; 
    using (System.Data.SqlClient.SqlCommand cmd = database.Connection.CreateCommand()) 
    { 
     cmd.CommandText = string.Format("SELECT TOP 1 * FROM {0}", mainTable); 
     cmd.CommandType = System.Data.CommandType.Text; 
     using (System.Data.SqlClient.SqlDataReader rdr = cmd.ExecuteReader()) 
     { 
      schema = rdr.GetSchemaTable(); 
     } 
    } 
Verwandte Themen