J'ai une méthode qui se connecte à une base de données via Odbc. La procédure stockée que j'appelle A une valeur de retour qui, du côté de la base de données, est un 'Char'. En ce moment, je récupère Cette valeur de retour sous forme de chaîne et je l’utilise dans une simple instruction if. Je n’aime vraiment pas l’idée De comparer une chaîne comme celle-ci lorsque seulement deux valeurs peuvent revenir de la base de données, 0 et 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;
}
Quelle serait la bonne façon de gérer cette situation. J'ai essayé 'Convert.ToBoolean ()' qui semblait être une réponse évidente, mais je suis tombé sur la chaîne qui n'était pas reconnue comme un booléen valide. 'exception étant jeté. Est-ce que je manque quelque choseici ou existe-t-il un autre moyen de faire en sorte que "1" et "0" agissent comme des vrais et des faux?
Merci!
Que diriez-vous:
return (returnValue == "1");
ou comme suggéré ci-dessous:
return (returnValue != "0");
Le bon dépendra de ce que vous recherchez comme résultat du succès.
Dans une seule ligne de code:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
Si vous voulez que la conversion réussisse toujours, le meilleur moyen de convertir la chaîne serait probablement de considérer "1"
en tant que true
et toute autre chose en tant que false
(comme le fait Kevin). Si vous vouliez que la conversion échoue si quelque chose d'autre que "1"
ou "0"
est renvoyé, les éléments suivants suffiraient (vous pouvez le mettre dans une méthode d'assistance):
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.");
}
Définissez le type de retour sur numérique - vous n'avez pas besoin d'un caractère (donc ne l'utilisez pas); une valeur numérique (0/1) peut être convertie avec Convert.ToBoolean (num)
Sinon: utilisez la réponse de Kevin
Vous pouvez utiliser ce formulaire:
return returnValue.Equals("1") ? true : false;
Ou plus simplement (grâce à Jurijs Kastanovs):
return returnValue.Equals("1");
Ou si la valeur booléenne n'est pas renvoyée, vous pouvez faire quelque chose comme ceci:
bool boolValue = (returnValue == "1");
Ma solution (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