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
Sí, sólo un problema de sintaxis. Intenta esto en su lugar:
if (reader["usr.ursrdaystime"] != DBNull.Value)
.Equals()
está comprobando si dos instancias de objetos son iguales .
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();
}
if(!rsData.IsDBNull(rsData.GetOrdinal("usr.ursrdaystime")))
{
strLevel = rsData.GetString("usr.ursrdaystime");
}
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx