visual valores utilice tipo studio que puede net dato convertir check acepte c# dbnull

c# - valores - DBNull if declaración



string dbnull (9)

Estoy tratando de ejecutar un procedimiento almacenado y luego uso una instrucción if para verificar los valores nulos y me quedo corto. Soy un chico de VB, así que ten paciencia si estoy cometiendo un error de sintaxis de colegial.

objConn = new SqlConnection(strConnection); objConn.Open(); objCmd = new SqlCommand(strSQL, objConn); rsData = objCmd.ExecuteReader(); rsData.Read(); if (!(rsData["usr.ursrdaystime"].Equals(System.DBNull.Value))) { strLevel = rsData["usr.ursrdaystime"].ToString(); }

¿Esto me permitiría verificar si la conexión SQL está devolviendo solo un valor y, de ser así, rellenar mi cadena?

Estoy acostumbrado a poder simplemente verificar lo siguiente para ver si se está devolviendo un valor y no estoy seguro de hacerlo correctamente con C #

Si no es IsDBNull (rsData ("usr.ursrdaystime"))

¡Cualquier ayuda sería apreciada!


Al primer uso ExecuteScalar

objConn = new SqlConnection(strConnection); objConn.Open(); objCmd = new SqlCommand(strSQL, objConn); object result = cmd.ExecuteScalar(); if(result == null) strLevel = ""; else strLevel = result.ToString();


Considerar:

if(rsData.Read()) { int index = rsData.GetOrdinal("columnName"); // I expect, just "ursrdaystime" if(rsData.IsDBNull(index)) { // is a null } else { // access the value via any of the rsData.Get*(index) methods } } else { // no row returned }

También: necesitas más using ; p


El equivalente más cercano a su VB sería ( vea esto ):

Convert.IsDBNull()

Pero hay varias formas de hacerlo, y la mayoría están vinculadas desde aquí.


Esto debería funcionar.

if (rsData["usr.ursrdaystime"] != System.DBNull.Value)) { strLevel = rsData["usr.ursrdaystime"].ToString(); }

También es necesario agregar utilizando la declaración, como a continuación:

using (var objConn = new SqlConnection(strConnection)) { objConn.Open(); using (var objCmd = new SqlCommand(strSQL, objConn)) { using (var rsData = objCmd.ExecuteReader()) { while (rsData.Read()) { if (rsData["usr.ursrdaystime"] != System.DBNull.Value) { strLevel = rsData["usr.ursrdaystime"].ToString(); } } } } }

esto dispondrá automáticamente (cerrar) recursos fuera del bloque {..}.


La forma idiomática es decir:

if(rsData["usr.ursrdaystime"] != DBNull.Value) { strLevel = rsData["usr.ursrdaystime"].ToString(); }

Esta:

rsData = objCmd.ExecuteReader(); rsData.Read();

Hace que parezca que estás leyendo exactamente un valor. Utilice IDbCommand.ExecuteScalar en IDbCommand.ExecuteScalar lugar.


Operador ternario debe hacer muy bien aquí: condición? primera_expresión: segunda_expresión;

strLevel =! Convert.IsDBNull (rsData ["usr.ursrdaystime"])? Convert.ToString (rsData ["usr.ursrdaystime"]): null



Yo uso String.IsNullorEmpty a menudo. Le funcionará porque cuando DBNull se establece en .ToString, se vuelve vacío.

if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){ strLevel = rsData["usr.ursrdaystime"].toString(); }