2008-12-23 7 views
3

Puisque le OleDbParameter n'utilise pas de paramètres nommés (en raison de sa nature), pourquoi la classe .NET OleDbParameter s'attend-elle à recevoir un nom? Tous les constructeurs requièrent un nom de paramètre, et je ne suis jamais sûr du nom à donner; mon nom est ok? ou le nom de mes grands-mères?L'obsession du nom OleDbParameter

Répondre

1

Comme tout le reste dans la programmation, nommez-le quelque chose de significatif dans votre contexte! (nom, ordre, ville, etc.)

Vous utilisez les noms pour accéder à la collection de paramètres par nom alors que dans votre code C#:

OleDbCommand command = new OleDbCommand(); 
...//Add your parameters with names, then reference them later if you need to: 
command.Parameters["name"].Value = "your name or your grandmothers name here"; 

Cela est également utile lorsque vous utilisez des paramètres OUT pour extraire la valeur après l'exécution de votre déclaration:

OleDbParameter outParam = new OleDbParameter(); 
outParam.Direction = ParameterDirection.Output; 
outParam.DbType = DbType.Date; 
outParam.ParameterName = "outParam"; 
command.Parameters.Add(outParam); 
command.ExecuteNonQuery(); 
DateTime outParam = Convert.ToDateTime(command.Parameters["outParam"].Value); 
+0

Remarque: 'command.Parameters [" nom "]. Value =" votre nom ou le nom de vos grands-mères ici ";' est __not__ un moyen valide de _add_ un paramètre, uniquement pour changer la valeur d'un _existing_ un. J'ai d'abord déduit qu'il l'ajouterait à la collection, sinon présent. –

+0

Je n'ai jamais dit que c'est comme ça que vous ajoutez un param, j'ai dit (dans le commentaire ci-dessus) d'ajouter vos params en premier, puis de les référencer plus tard, en utilisant la notation en carré –

+1

That's reasonable; Je l'ai d'abord interprété comme étant associé à la ligne ci-dessous, et non au '...'. Ainsi mon avertissement aux futurs lecteurs. Ne pas critiquer; juste clarifier. –

3

Bien que le OleDb/fournisseurs Odbc utilisent des paramètres de position au lieu de paramètres nommés -

  1. les paramètres devront être identifiés d'une manière ou d'une autre dans la collection OleDbParameter si vous avez besoin de les référencer. En outre, lorsque l'instruction sql paramétrée est construite, une variable pour chaque paramètre est déclarée et sa valeur respective est affectée. puis utilisé dans l'instruction sql qui est exécutée.

Prenez par exemple:

string sql = "SELECT * FROM MyTable WHERE Field = ?"; 
OleDbCommand cmd = new OleDbCommmand(sql, sqlConnection); 
cmd.Parameters.Add("@FieldValue", OleDbType.Int32, 42); 
OleDbDataReader dr = cmd.ExecuteReader(); 

Le SQL exécuté serait quelque chose comme (ou à proximité, je pense):

DECLARE @FieldValue INT; 
SET @FieldValue = 42; 
SELECT * FROM MyTable WHERE Field = @FieldValue 

on vous recommande d'utiliser un nom de paramètre correspond le mieux au nom de la colonne en cours d'exploitation.

1

Il existe des interfaces et des usines pour fournir un degré d'indépendance du fournisseur sous-jacent pour l'accès aux données - IDataParameter, DbParameter, DbProviderFactory etc.

À cette fin, tous les paramètres peuvent être nommés, même si le nom n'est pas utilisé par le fournisseur sous-jacent.