У меня есть метод, который подключается к базе данных через 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!="0")
. Было бы более естественно , что0
есть ,false
и каждый номер, не нольtrue
. Конечно, здесь у нас есть случай, когда Крис использует строки вместо чисел, так что этот комментарий верен только частично;)В одной строке кода:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
источник
Если вы хотите, чтобы преобразование всегда было успешным, вероятно, лучший способ преобразовать строку - это рассматривать
"1"
astrue
и все остальное как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."); }
источник
Установите тип возвращаемого значения на числовой - вам не нужен символ (так что не используйте его); числовое значение (0/1) можно преобразовать с помощью Convert.ToBoolean (num)
В противном случае: используйте ответ Кевина
источник
Convert.ToBoolean
принимает только строки True / true / False / falseВы можете использовать эту форму:
return returnValue.Equals("1") ? true : false;
Или проще (спасибо Юрию Кастанову):
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;
Возможно, вы вернете значения как хотите.
источник