2009-07-30 4 views
2

J'ai ajouté une valeur nulle à la liste des paramètres pour insérer des valeurs dans une table, qui accepte certaines valeurs nulles. Voici mes codes exemple:comment créer IDbDataParameter avec une valeur null-able?

bool sql = true; 
// .... 
List<IDbDataParameter> parameters = new List<IDbDataParmeter>(); 
// adding values... 
object objVal = 1; 
parameters.Add(
    sql ? new SqlParameter("@colIntA", objVal) : 
      new OracleParamer(":colIntA", objVal)); 
// this would not work, what should I add? 
objVal = string.Empty; 
parameters.Add(
    sql ? new SqlParameter("@colIntB", objVal) : 
      new OracleParamer(":colIntB", objVal)); 

Je ne sais pas si je utiliser la valeur DBNull spécifique db et est également que SQL ou Oracle spécifique?

Répondre

1

Utilisez DbNull.Value. Cela fonctionnera pour toutes les sources de données compatibles ADO.NET (les fournisseurs SQL et Oracle), car il est de la responsabilité du fournisseur de savoir quoi faire lorsqu'il rencontre une valeur DbNull.

2

Vous essayez d'affecter une chaîne vide ('') à un paramètre int là-bas, alors oui, cela ne fonctionnera pas.

Pour représenter une valeur nulle indépendante de la base de données, utilisez DbNull.Value.

new SqlParameter("colIntB", DbNull.Value) 

(. Notez que je suis parti de la « @ », qui travaille dans mon expérience avec Sqlparameters Je ne suis pas sûr que vous pouvez faire la même chose avec le « : » pour Oracle.)

Un conseil supplémentaire: utilisez votre connexion pour créer la commande et la commande pour créer les paramètres. Cela créera des instances de la bonne classe en fonction du type de connexion sous-jacente:

IDbConnection conn = sql ? new SqlConnection(...) : new OracleConnection(...); 

// this will give you either an SqlCommand or an OracleCommand 
IDbCommand cmd = conn.CreateCommand(); 

// this will give you either an SqlParameter or an OracleParameter 
IDbDataParameter param1 = cmd.CreateParameter(); 
param1.ParameterName = "colIntB"; 
param1.Value = objVal; 

cmd.Parameters.Add(param1); 
+0

Point très intéressant sur l'obtention du paramètre. Si j'ai une liste de paramètres, il se peut que je doive créer une boucle pour créer, définir le nom, définir la valeur et définir la direction si nécessaire. Merci! –

+0

David - Jetez également un oeil à ma méthode d'extension AddInputParameters. Rend les choses très faciles: http://www.madprops.org/blog/adding-idbcommand-parameters-with-anonymous-types/ –

+0

réellement dans la classe où le paramètre est créé dans mon cas, il n'y a pas IdbConnection ni IDbCommand est disponible . J'ai une classe SQLParameter pour créer la collection de IDbDataParameter. J'ai des informations sur sql ou oracle. Puis-je créer une connexion factice et l'utiliser pour obtenir des paramètres? –

Questions connexes