95

我有一个通过 Odbc 连接到数据库的方法。我正在调用的存储过程有一个返回值,它从数据库端是一个'Char'。现在,我将该返回值作为字符串获取,并在一个简单的 if 语句中使用它。当只能从数据库返回两个值 0 和 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;
} 

处理这种情况的正确方法是什么。我尝试了“Convert.ToBoolean()”,这似乎是显而易见的答案,但我遇到了“字符串未被识别为有效布尔值”。' 抛出异常。我在这里遗漏了什么,还是有另一种方法可以让“1”和“0”表现得像真假?

谢谢!

4

9 回答 9

169

怎么样:

return (returnValue == "1");

或如下所示:

return (returnValue != "0");

正确的结果取决于您要寻找的成功结果。

于 2010-04-15T18:46:01.233 回答
119

在一行代码中:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
于 2012-09-05T18:14:33.850 回答
12

如果您希望转换始终成功,则转换字符串的最佳方法可能是将"1"astrue和其他任何东西视为false(如 Kevin 所做的那样)。"1"如果您希望在返回or以外的任何内容时转换失败"0",那么以下内容就足够了(您可以将其放在辅助方法中):

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.");
}
于 2010-04-15T18:55:40.433 回答
6

您可以使用该表格:

return returnValue.Equals("1") ? true : false;

或者更简单(感谢 Jurijs Kastanovs):

return returnValue.Equals("1");
于 2016-02-19T17:43:33.463 回答
5

将返回类型设置为数字 - 您不需要 char(所以不要使用它);可以使用 Convert.ToBoolean(num) 转换数值 (0/1)

否则:使用凯文的答案

于 2010-04-15T18:49:52.750 回答
2

或者如果没有返回布尔值,您可以执行以下操作:

bool boolValue = (returnValue == "1");
于 2014-11-18T23:18:51.073 回答
1

我的解决方案(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
于 2019-01-07T17:13:30.877 回答
0
(returnValue != "1" ? false : true);
于 2015-04-25T04:35:15.157 回答
-1

如果您不想转换。只需使用;

 bool _status = status == "1" ? true : false;

也许您会根据需要返回值。

于 2016-12-26T10:20:49.500 回答