我有一个通过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'表现得像真假一样?
谢谢!
怎么样:
return (returnValue == "1");
或者如下所示:
return (returnValue != "0");
正确的将取决于您所寻找的成功结果。
在一行代码中:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
如果你希望转换总能成功,那么转换字符串的最佳方法可能是将"1"
视为true
,而将其他任何东西视为false
(正如凯文所做的那样)。如果你希望转换失败,如果返回除"1"
或"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.");
}
将返回类型设置为numeric - 您不需要char(所以不要使用它);可以使用Convert.ToBoolean(num)转换数值(0/1)
否则:使用凯文的回答
您可以使用该表单:
return returnValue.Equals("1") ? true : false;
或者更简单(感谢Jurijs Kastanovs):
return returnValue.Equals("1");
或者,如果未返回布尔值,则可以执行以下操作:
bool boolValue = (returnValue == "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
(returnValue != "1" ? false : true);
如果你不想转换。只是使用;
bool _status = status == "1" ? true : false;
也许你会根据需要返回值。