sql >> Databasteknik >  >> RDS >> Oracle

Hanterar ExecuteScalar() när inga resultat returneras

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 tilldelas getusername .
  • Om raden finns, men har NULL i användarnamn (är detta ens möjligt i din DB?), resultatet av command.ExecuteScalar() är DBNull.Value , vilket resulterar i en InvalidCastException .

I alla fall, NullReferenceException borde inte vara möjligt, så ditt problem ligger förmodligen någon annanstans.



  1. SUBSTRING Kommando i SQL:A Primer

  2. Att skapa en Entity Framework Model omfattar flera databaser

  3. Undvikande enstaka citat i PHP när du infogar i MySQL

  4. Inte lika <> !=operator på NULL