Enligt MSDN-dokumentationen för DbCommand.ExecuteScalar:
Om den första kolumnen i den första raden i resultatuppsättningen inte hittas, returneras anull-referens (Ingenting i Visual Basic). Om värdet i databasen är null returnerar frågan DBNull.Value.
Tänk på följande utdrag:
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();
}
Vid körning (testat under ODP.NET men bör vara samma under alla ADO.NET-leverantörer), beter sig så här:
- Om raden inte finns, resultatet av
command.ExecuteScalar()
är null, som sedan castas till en nollsträng och tilldelasgetusername
. - Om raden finns, men har NULL i användarnamn (är detta ens möjligt i din DB?), resultatet av
command.ExecuteScalar()
ärDBNull.Value
, vilket resulterar i enInvalidCastException
.
I alla fall, NullReferenceException
borde inte vara möjligt, så ditt problem ligger förmodligen någon annanstans.