У меня есть метод, который соединяется с базой данных через Odbc. Хранимая процедура, которую я называю, имеет возвращаемое значение, которое со стороны базы данных является 'Символом'. Прямо сейчас я захватываю то возвращаемое значение как строку и использую его в простом если оператор. Мне действительно не нравится идея сравнить строку как это, когда только два значения могут возвратиться из базы данных, 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;
}
Каков был бы надлежащий способ обработать эту ситуацию. Я попробовал, 'Преобразовывают. ToBoolean ()', который походил на очевидный ответ, но я столкнулся с 'Строкой, не был распознан как допустимая булевская переменная'. исключение выдается. Я пропускаю что-то здесь или являюсь там другим способом сделать '1' и '0' действие как истина и ложь?
Спасибо!
Как насчет:
return (returnValue == "1");
или как предложено ниже:
return (returnValue != "0");
Правильный вариант будет зависеть от того, что вы ищете в качестве результата успеха.
Если вы хотите, чтобы преобразование всегда было успешным, вероятно, лучший способ преобразовать строку - это рассматривать "1"
как истина
и все остальное как ложь
(как это делает Кевин). Если вы хотите, чтобы преобразование завершалось неудачно, если возвращалось что-либо, кроме "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)
В противном случае: используйте ответ Кевина