2012-05-31 1 views
2

Ce code:Pourquoi cette requête me donne-t-elle "Référence d'objet non définie sur une instance d'un objet"?

string SidFinch = "Unknown SidFinch"; 

String sql = @"SELECT SidFinch 
      FROM PlatypusDuckbillS 
      WHERE PlatypusSTARTDATE = :Duckbilldate AND 
        DuckbillID = :Duckbillid"; 
try { 
    using (OracleCommand ocmd = new OracleCommand(sql, oc)) { 
     ocmd.Parameters.Add("Duckbilldate", DuckbillDate); 
     ocmd.Parameters.Add("Duckbillid", DuckbillID); 
     SidFinch = ocmd.ExecuteScalar().ToString(); 
} 

... échoue sur la ligne "ExecuteScalar". Il ne trouve rien (il n'y a pas d'enregistrement correspondant à l'ID que j'ai passé), mais cela ne devrait pas causer ce problème, n'est-ce pas?

+2

Il suffit de dire ... pimpant ... http://pastie.org/4003886 –

Répondre

8

Si elle ne trouve rien - alors probablement .ExecuteScalar() est de retour NULL et ce n'est pas une bonne idée d'appeler .ToString() sur un NULL ....

Vous devez changer votre code pour être quelque chose comme:

object result = ocmd.ExecuteScalar(); 

if(result != null) 
{ 
    SidFinch = result.ToString(); 
} 
else 
{ 
    // do whatever is appropriate here.... 
} 
+0

Si j'omettez le ".ToString()" Je reçois, « Impossible de convertir implicitement le type 'objet' à 'string'. Une conversion explicite existe (manque-t-il une distribution?) " –

+0

C'est parce que SidFinch est une chaîne. Effectuez une vérification null avant de convertir en chaîne. – Yatrix

+1

@Clay oui, mais cela dépend de quel type 'SidFinch' est, et si elle peut être nulle. Une distribution '(chaîne) ocmd.ExecuteScalar()' ou 'Convert.ToString (ocmd.ExecuteScalar())' devrait fonctionner. –

Questions connexes