web-dev-qa-db-ja.com

「0」と「1」を偽と真に変換する方法

Odbc経由でデータベースに接続する方法があります。私が呼び出しているストアドプロシージャには、データベース側から 'Char'である戻り値があります。現在、私はその戻り値を文字列として取得し、単純なifステートメントで使用しています。データベースから0と1の2つの値しか返されない場合、このような文字列を比較するという考えは本当に好きではありません。

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」を真と偽のように動作させる別の方法がありますか?

ありがとう!

80
Chris

どうですか:

return (returnValue == "1");

または以下に示すように:

return (returnValue != "0");

正しいものは、成功の結果としてあなたが探しているものに依存します。

137
kemiller2002

1行のコードで:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
96
Chris

変換を常に成功させたい場合、おそらく文字列を変換する最良の方法は、"1"trueと見なし、他のすべてをfalseと見なすことです(Kevinと同様)。 "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.");
}
12
Zach Johnson

戻り値の型を数値に設定します-charは不要です(使用しないでください)。 Convert.ToBoolean(num)で数値(0/1)を変換できます

それ以外の場合:ケビンの答えを使用

5
riffnl

そのフォームを使用できます:

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

またはもっと簡単に(Jurijs Kastanovsに感謝):

return returnValue.Equals("1");
3
Nuno Ribeiro

または、ブール値が返されない場合は、次のようなことができます。

bool boolValue = (returnValue == "1");
1
Pabinator

私の解決策(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
0
user2241289