Ifølge MSDN-dokumentation for DbCommand.ExecuteScalar:
Hvis den første kolonne i den første række i resultatsættet ikke findes, returneres anull reference (Intet i Visual Basic). Hvis værdien i databasen er null, returnerer forespørgslen DBNull.Value.
Overvej følgende uddrag:
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();
}
Ved kørsel (testet under ODP.NET, men burde være det samme under enhver ADO.NET-udbyder), opfører det sig sådan:
- Hvis rækken ikke eksisterer, er resultatet af
command.ExecuteScalar()
er null, som derefter castes til en null-streng og tildelesgetusername
. - Hvis rækken eksisterer, men har NULL i brugernavn (er dette overhovedet muligt i din DB?), er resultatet af
command.ExecuteScalar()
erDBNull.Value
, hvilket resulterer i enInvalidCastException
.
Under alle omstændigheder er NullReferenceException
burde ikke være muligt, så dit problem ligger sandsynligvis et andet sted.