Eu tenho um método que está se conectando a um banco de dados via Odbc. O procedimento armazenado que estou chamando tem um valor de retorno que do lado do banco de dados é um 'Char'. Agora estou pegando esse valor de retorno como uma string e usando-o em uma instrução if simples. Eu realmente não gosto da ideia de comparar uma string como esta quando apenas dois valores podem retornar do banco de dados, 0 e 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;
}
Qual seria a forma adequada de lidar com essa situação. Tentei 'Convert.ToBoolean ()', que parecia ser a resposta óbvia, mas encontrei a mensagem 'String não foi reconhecida como um Booleano válido. 'exceção sendo lançada. Estou faltando alguma coisa aqui ou há outra maneira de fazer '1' e '0' agirem como verdadeiro e falso?
Obrigado!
return (returnValue!="0")
. Seria mais natural que0
sejafalse
e todo número que não seja zero o sejatrue
. Claro, aqui temos o caso em que Chris usa strings em vez de números, então este comentário é apenas parcialmente válido;)Em uma única linha de código:
fonte
Se você deseja que a conversão sempre seja bem-sucedida, provavelmente a melhor maneira de converter a string seria considerar
"1"
comotrue
e qualquer outra coisa comofalse
(como Kevin faz). Se você quiser que a conversão falhe se algo diferente de"1"
ou"0"
for retornado, o seguinte será suficiente (você pode colocá-lo em um método auxiliar):fonte
Defina o tipo de retorno como numérico - você não precisa de um caractere (portanto, não o use); um valor numérico (0/1) pode ser convertido com Convert.ToBoolean (num)
Caso contrário: use a resposta de Kevin
fonte
Convert.ToBoolean
aceita apenas strings Verdadeiro / verdadeiro / falso / falsoVocê pode usar esse formulário:
Ou mais simplesmente (graças a Jurijs Kastanovs):
fonte
Ou se o valor booleano não for retornado, você pode fazer algo assim:
fonte
Minha solução (vb.net):
fonte
fonte
Se você não deseja converter.Basta usar;
Talvez você retorne os valores que deseja.
fonte