Selon la documentation MSDN pour DbCommand.ExecuteScalar:
"Si la première colonne de la première ligne du jeu de résultats n'est pas trouvé, une référence null (Nothing en Visual Basic) est retourné. Si la valeur dans la base de données est null, la requête renvoie DBNull.De la valeur".
Considérons le fragment de code 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 il devrait être le même pour tout ADO.NET fournisseur), il se comporte comme cela:
- Si la ligne n'existe pas, le résultat d'
command.ExecuteScalar()
est nulle, ce qui est ensuite intégré à une chaîne nulle et affectée à l' getusername
.
- Si la ligne existe, mais a la valeur NULL dans le nom d'utilisateur (est-ce encore possible dans votre base de données?), le résultat de l'
command.ExecuteScalar()
est DBNull.Value
, entraînant un InvalidCastException
.
Dans tous les cas, l' NullReferenceException
ne devrait pas être possible, alors votre problème est probablement d'ailleurs.