Tengo un método que se conecta a una base de datos a través de Odbc. El procedimiento almacenado al que estoy llamando tiene un valor de retorno que desde el lado de la base de datos es un 'Char'. En este momento, estoy tomando ese valor de retorno como una cadena y lo uso en una simple declaración if. Realmente no me gusta la idea de comparar una cadena como esta cuando solo dos valores pueden regresar de la base de datos, 0 y 1.
OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn);
fetchCommand.CommandType = CommandType.StoredProcedure;
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter);
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1)
.Direction = ParameterDirection.Output;
fetchCommand.ExecuteNonQuery();
string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString();
if (returnValue == "1")
{
return true;
}
Cuál sería la forma adecuada de manejar esta situación. Probé 'Convert.ToBoolean ()', que parecía la respuesta obvia, pero me encontré con el 'String no fue reconocido como un booleano válido. 'excepción lanzada. ¿Me estoy perdiendo algo aquí, o hay otra forma de hacer que el '1' y el '0' actúen como verdadero y falso?
¡Gracias!
return (returnValue!="0")
. Sería más natural que así0
seafalse
y todo número que no sea cero lo estrue
. Por supuesto, aquí tenemos el caso en el que Chris usa cadenas en lugar de números, por lo que este comentario es solo parcialmente válido;)En una sola línea de código:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
fuente
Si desea que la conversión siempre tenga éxito, probablemente la mejor manera de convertir la cadena sería considerar
"1"
comotrue
y cualquier otra cosa comofalse
(como hace Kevin). Si desea que la conversión falle si se devuelve algo que no sea"1"
o"0"
, entonces lo siguiente sería suficiente (podría ponerlo en un método auxiliar):if (returnValue == "1") { return true; } else if (returnValue == "0") { return false; } else { throw new FormatException("The string is not a recognized as a valid boolean value."); }
fuente
Establezca el tipo de retorno en numérico: no necesita un carácter (así que no lo use); un valor numérico (0/1) se puede convertir con Convert.ToBoolean (num)
De lo contrario: use la respuesta de Kevin
fuente
Convert.ToBoolean
acepta solo cadenas de verdadero / verdadero / falso / falsoPuedes usar ese formulario:
return returnValue.Equals("1") ? true : false;
O más simplemente (gracias a Jurijs Kastanovs):
return returnValue.Equals("1");
fuente
O si no se devuelve el valor booleano, puede hacer algo como esto:
bool boolValue = (returnValue == "1");
fuente
Mi solución (vb.net):
Private Function ConvertToBoolean(p1 As Object) As Boolean If p1 Is Nothing Then Return False If IsDBNull(p1) Then Return False If p1.ToString = "1" Then Return True If p1.ToString.ToLower = "true" Then Return True Return False End Function
fuente
(returnValue != "1" ? false : true);
fuente
Si no quieres convertir, solo usa;
bool _status = status == "1" ? true : false;
Quizás devuelva los valores que desee.
fuente