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.
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% 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% 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%Tags und Links c# stored-procedures database-schema ado.net sql-server-2000