Oracle
 sql >> Base de données >  >> RDS >> Oracle

Gestion de ExecuteScalar() lorsqu'aucun résultat n'est renvoyé

Selon la documentation MSDN pour DbCommand.ExecuteScalar :

Si la première colonne de la première ligne du jeu de résultats est introuvable, une référence null (Nothing en Visual Basic) est renvoyée. Si la valeur dans la base de données est nulle, la requête renvoie DBNull.Value.

Considérez l'extrait suivant :

using (var conn = new OracleConnection(...)) {
    conn.Open();
    var command = conn.CreateCommand();
    command.CommandText = "select username from usermst where userid=2";
    string getusername = (string)command.ExecuteScalar();
}

Au moment de l'exécution (testé sous ODP.NET mais devrait être le même sous n'importe quel fournisseur ADO.NET), il se comporte comme ceci :

  • Si la ligne n'existe pas, le résultat de command.ExecuteScalar() est nul, qui est ensuite casté en une chaîne nulle et assigné à getusername .
  • Si la ligne existe, mais a NULL dans le nom d'utilisateur (est-ce même possible dans votre base de données ?), le résultat de command.ExecuteScalar() est DBNull.Value , entraînant une InvalidCastException .

Dans tous les cas, la NullReferenceException ne devrait pas être possible, donc votre problème se situe probablement ailleurs.