Saya memiliki metode yang menghubungkan ke database melalui Odbc. Prosedur tersimpan yang saya panggil memiliki nilai kembali yang dari sisi database adalah 'Char'. Saat ini saya mengambil nilai pengembalian itu sebagai string dan menggunakannya dalam pernyataan if sederhana. Saya benar-benar tidak suka gagasan membandingkan string seperti ini ketika hanya dua nilai yang dapat kembali dari database, 0 dan 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;
}
Bagaimana cara yang tepat untuk menangani situasi ini. Saya sudah mencoba 'Convert.ToBoolean ()' yang sepertinya jawaban yang jelas tetapi saya menemukan 'String tidak dikenali sebagai Boolean yang valid. 'pengecualian dilempar. Apakah saya melewatkan sesuatu di sini, atau adakah cara lain untuk membuat '1' dan '0' menjadi benar dan salah?
Terima kasih!
return (returnValue!="0")
. Akan lebih alami bahwa0
adafalse
dan setiap angka yang bukan nol adalahtrue
. Tentu saja di sini kita memiliki kasus di mana Chris menggunakan string alih-alih angka, jadi komentar ini hanya valid sebagian;)Dalam satu baris kode:
bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
sumber
Jika Anda ingin konversi selalu berhasil, mungkin cara terbaik untuk mengubah string adalah dengan mempertimbangkan
"1"
astrue
dan apa punfalse
(seperti yang dilakukan Kevin). Jika Anda ingin konversi gagal jika ada selain"1"
atau"0"
dikembalikan, maka berikut ini akan cukup (Anda bisa meletakkannya di metode helper):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."); }
sumber
Setel tipe pengembalian ke numerik - Anda tidak memerlukan karakter (jadi jangan gunakan); nilai numerik (0/1) dapat dikonversi dengan Convert.ToBoolean (num)
Jika tidak: gunakan jawaban Kevin
sumber
Convert.ToBoolean
hanya menerima string Benar / benar / Salah / salahAnda dapat menggunakan formulir itu:
return returnValue.Equals("1") ? true : false;
Atau lebih sederhana (terima kasih kepada Jurijs Kastanovs):
return returnValue.Equals("1");
sumber
Atau jika nilai Boolean tidak dikembalikan, Anda dapat melakukan sesuatu seperti ini:
bool boolValue = (returnValue == "1");
sumber
Solusi saya (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
sumber
(returnValue != "1" ? false : true);
sumber
Jika Anda tidak ingin mengonversi. Gunakan saja;
bool _status = status == "1" ? true : false;
Mungkin Anda akan mengembalikan nilai seperti yang Anda inginkan.
sumber