sql >> Database teknologi >  >> RDS >> Oracle

Håndtering af ExecuteScalar() når ingen resultater returneres

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 tildeles getusername .
  • Hvis rækken eksisterer, men har NULL i brugernavn (er dette overhovedet muligt i din DB?), er resultatet af command.ExecuteScalar() er DBNull.Value , hvilket resulterer i en InvalidCastException .

Under alle omstændigheder er NullReferenceException burde ikke være muligt, så dit problem ligger sandsynligvis et andet sted.



  1. Hvordan får du din database til at tale mange sprog?

  2. Datamodellen for vigtige datoer

  3. Sådan omdøbes et kolonnenavn eller tabelnavn i SQL Server - SQL Server / T-SQL selvstudie del 36

  4. SQL 'LIKE'-forespørgsel ved hjælp af '%', hvor søgekriteriet indeholder '%'