So erhalten Sie Spalten Primärschlüsseleinschränkungen mithilfe von SqlConnection.GetSchema ()

8

Ich habe Code von ADO.NET, um das Datenbankschema dynamisch zu erkennen, was ich brauche, ist, wie man mit der GetSchema -Methode für SqlConnection eindeutige Spalteneinschränkungen und Primärschlüsseleinschränkungen erhält. Dies ist der Code, den ich habe:

%Vor%     
shamim 01.05.2011, 16:30
quelle

4 Antworten

4

Es gibt nichts im Aufruf von GetSchemaTable on SqlConnection , mit denen Sie das herausfinden können.

Es könnte scheinen , dass Sie den Spaltenwert IsKey verwenden können, der für alles, was zur eindeutigen Identifizierung des Datensatzes in der Tabelle beiträgt, den Wert true zurückgibt. Aus der Dokumentation für die IsKey -Spalte (Hervorhebung von mir):

  

true: Die Spalte gehört zu einer Menge von   Spalten im Rowset, die genommen wurden   zusammen, identifizieren Sie die Zeile eindeutig.   Die Menge der Spalten, für die IsKey festgelegt ist   true muss eine Zeile eindeutig identifizieren   das Rowset. Es gibt keine Anforderung   dass diese Spaltengruppe minimal ist   Reihe von Spalten. Dieser Satz von Spalten   kann aus einer Basistabelle generiert werden   Primärschlüssel, eine eindeutige Einschränkung oder a   eindeutiger Index .

Aus diesem Grund können Sie nicht garantieren, dass es zu einem Primärschlüssel per se beiträgt.

Nun, wenn alles was Sie brauchen, etwas ist, um die Zeile eindeutig zu identifizieren, dann ist IsKey in Ordnung, da der Primärschlüssel nicht immer die Art ist, eine Zeile eindeutig zu identifizieren (zB können Sie natürliche Bezeichner mit einem eindeutigen Index haben) . Selbst wenn Sie einen Primärschlüssel und einen eindeutigen Index mit anderen Spalten haben, sind die Werte für alle diese Spalten in Kombination immer eindeutig.

Wenn Sie jedoch speziell auf die Spalten achten müssen, aus denen der Primärschlüssel besteht, liefert Ihnen GetSchemaTable nicht die Informationen, die Sie benötigen. Stattdessen können Sie einfach einen Anruf bei sp_pkeys System gespeicherte Prozedur, um die Namen der Spalten zu finden, die zur Erstellung des Primärschlüssels beitragen.

    
casperOne 01.05.2011, 16:43
quelle
2

Falls noch jemand eine Lösung benötigt, habe ich eine Funktion dafür erstellt, der Sql-Befehl enthält die Anweisung, die Schemainformationen erhalten soll.

%Vor%     
Clarence Assey 27.04.2012 12:13
quelle
2

Sie können die primaryKeys , UniqueKeys und ForeignKeys und alle anderen in der von diesem Befehl zurückgegebenen dataTable aufgeführten Schemata abrufen: "connection.GetSchema (" MetaDataCollections ")"

Unterhalb eines Codes, der die primären Schlüssel und eindeutigen Schlüssel (Schlüsselname und Spaltenname) zurückgibt.

Schauen Sie sich die gesamte Dokumentation Hier

an %Vor%     
user5327378 12.09.2015 19:40
quelle
0

Was ist mit dem Aufruf von GetSchema () auf Ihrer SqlConnection? Mit collectionName="IndexColumns" und einer Liste von Schemaeinschränkungen können Sie die gewünschten Informationen mit GetSchema () anfordern.

Siehe:

Nachdem ich SqlConnection mit dem Datenbanknamen eingerichtet habe, funktionierte folgendes für mich:

%Vor%     
petrsnd 03.03.2014 22:31
quelle