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 saisis 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 alors que seules 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 la réponse évidente mais j'ai rencontré le 'String n'a pas été reconnu comme un booléen valide. 'exception étant levée. Est-ce que je manque quelque chose ici, ou y a-t-il une autre façon de faire en sorte que «1» et «0» agissent comme vrai et faux?
Merci!
return (returnValue!="0")
. Il serait plus naturel0
estfalse
et chaque nombre est non nul esttrue
. Bien sûr, nous avons ici le cas où Chris utilise des chaînes au lieu de nombres, donc ce commentaire n'est que partiellement valide;)En une seule ligne de code:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
la source
Si vous voulez que la conversion réussisse toujours, le meilleur moyen de convertir la chaîne serait probablement de considérer
"1"
commetrue
et n'importe quoi d'autre commefalse
(comme le fait Kevin). Si vous vouliez que la conversion échoue si autre chose que"1"
ou"0"
est retourné, alors ce qui suit suffirait (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."); }
la source
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
la source
Convert.ToBoolean
accepte uniquement les chaînes Vrai / Vrai / Faux / FauxVous pouvez utiliser ce formulaire:
return returnValue.Equals("1") ? true : false;
Ou plus simplement (grâce à Jurijs Kastanovs):
return returnValue.Equals("1");
la source
Ou si la valeur booléenne n'est pas renvoyée, vous pouvez faire quelque chose comme ceci:
bool boolValue = (returnValue == "1");
la source
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
la source
(returnValue != "1" ? false : true);
la source
Si vous ne voulez pas convertir, utilisez simplement;
bool _status = status == "1" ? true : false;
Vous retournerez peut-être les valeurs comme vous le souhaitez.
la source