Comment obtenir des colonnes de la clé Primaire de contraintes à l'aide de SqlConnection.GetSchema()
J'ai un code de ADO.NET pour détecter dynamiquement le schéma de base de données, ce dont j'ai besoin est de savoir comment obtenir des colonnes uniques contraintes et les contraintes de clé Primaire à l'aide de la GetSchema
méthode sur SqlConnection
. C'est le code que j'ai:
conn.Open();
SqlCommand mSqlCommand = new SqlCommand("sp_pkeys", conn);
mSqlCommand.CommandType = CommandType.StoredProcedure;
mSqlCommand.Parameters.Add(
"@table_name", SqlDbType.NVarChar).Value = tableName;
SqlDataReader mReader = mSqlCommand.ExecuteReader(
(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly));
//ExecuteReader();
DataTable schema = mReader.GetSchemaTable();
mReader.Close();
conn.Close();
OriginalL'auteur shamim | 2011-05-01
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien dans l'appel à
GetSchemaTable
àSqlConnection
qui vous permettra de comprendre cela.Il pourrait semblent que vous pouvez, à l'aide de la
IsKey
valeur de la colonne, qui doit retourner true pour tout ce qui contribue à une identification unique de l'enregistrement dans la table. Cependant, à partir de la documentation pour laIsKey
colonne (l'emphase est mienne):De ce fait, vous ne pouvez pas garantir qu'il contribue à une clé primaire per se.
Maintenant, si vous avez besoin de quelque chose pour identifier de manière unique la ligne, puis
IsKey
est très bien, que la clé primaire n'est pas toujours le moyen d'identifier de manière unique une ligne (par exemple, vous pouvez avoir naturel identifiants avec un index unique). Même si vous avez une clé primaire et d'un index unique avec les autres colonnes, les valeurs à côté de toutes ces colonnes, en combinaison sera toujours unique.Toutefois, si vous avez spécifiquement besoin de regarder les colonnes qui composent la clé primaire, puis
GetSchemaTable
ne sera pas vous donner les informations dont vous avez besoin. Plutôt, vous pouvez simplement faire un appel à lasp_pkeys
procédure stockée système pour trouver les noms des colonnes qui contribuent à faire de la clé primaire.Voir le lien pour le
sp_keys
procédure stockée, vous devez appeler cette procédure stockée pour obtenir les colonnes qui composent la clé primaire d'une table.dans ma syntaxe ci-dessus-je utiliser sp_keys procédure de là, j'ai passer le nom de la table ,dans ma datatable-je obtenir schéma, mais à partir du schéma, je ne détecte pas la clé primaire.J'ai donc chercher votre suggestion et de l'aide.Merci
je n'aime pas utiliser .SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = "sp_pKeys "+nom de la table; DataTable dtGet = new DataTable(); da.De remplissage(dtGet); return dtGet;...............Je veux retrive comme je l'ai descrived ci-dessus.
Pourquoi ne pas utiliser un
SqlCommand
où laCommandType
estCommandType.StoredProcedure
, définir laCommandText
àsp_keys
, puis ajouter les paramètres à l'Parameters
bien sur laSqlCommand
. Vous pouvez ensuite appelerExecuteDataTable
(ouExecuteDataReader
pour obtenir le résultat).OriginalL'auteur casperOne
En cas toujours quelqu'un a besoin de solutions, j'ai créé une fonction pour cela, le Sqlcommand contient la déclaration que vous voulez obtenir les informations de schéma.
OriginalL'auteur Clarence Assey
Vous pouvez obtenir le
primaryKeys
,UniqueKeys
etForeignKeys
et tout autre schéma figurant dans la table de données retourné par cette commande:"connection.GetSchema (" MetaDataCollections ")"
Ci-dessous un code qui vous renvoie le primaryKeys et UniqueKeys (nom de la Clé et le nom de colonne).
Regardez tous les documents Ici
OriginalL'auteur
Qu'en appelant GetSchema() sur votre SqlConnection? À l'aide de
collectionName="IndexColumns"
et une liste de restrictions de schéma, vous pouvez demander les informations que vous souhaitez à l'aide de GetSchema().Voir:
Une fois que j'ai établi le SqlConnection en utilisant le nom de base de données, le suivant a fonctionné pour moi:
OriginalL'auteur petrsnd