Ich habe eine Methode, die über Odbc eine Verbindung zu einer Datenbank herstellt. Die gespeicherte Prozedur, die ich aufrufe, hat einen Rückgabewert, der von der Datenbankseite ein 'Char' ist. Im Moment greife ich diesen Rückgabewert als Zeichenfolge und verwende ihn in einer einfachen if-Anweisung. Die Idee, einen solchen String zu vergleichen, gefällt mir wirklich nicht, wenn nur zwei Werte aus der Datenbank zurückkehren können, 0 und 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;
}
Was wäre der richtige Weg, um mit dieser Situation umzugehen? Ich habe 'Convert.ToBoolean ()' ausprobiert, was die offensichtliche Antwort zu sein schien, aber ich bin auf den 'String wurde nicht als gültiger Boolescher Wert erkannt. 'Ausnahme wird geworfen. Vermisse ich hier etwas oder gibt es eine andere Möglichkeit, '1' und '0' wie wahr und falsch wirken zu lassen?
Vielen Dank!
return (returnValue!="0")
. Es wäre natürlich , dass0
istfalse
und jede Zahl , die nicht Null isttrue
. Natürlich haben wir hier den Fall, dass Chris Strings anstelle von Zahlen verwendet, daher ist dieser Kommentar nur teilweise gültig;)In einer einzigen Codezeile:
quelle
Wenn Sie möchten, dass die Konvertierung immer erfolgreich ist, ist es wahrscheinlich der beste Weg, die Zeichenfolge zu konvertieren,
"1"
alstrue
und alles andere alsfalse
(wie Kevin) zu betrachten. Wenn Sie möchten, dass die Konvertierung fehlschlägt, wenn etwas anderes als"1"
oder"0"
zurückgegeben wird, reicht Folgendes aus (Sie können es in eine Hilfsmethode einfügen):quelle
Setzen Sie den Rückgabetyp auf numerisch - Sie benötigen kein Zeichen (verwenden Sie es also nicht). Ein numerischer Wert (0/1) kann mit Convert.ToBoolean (num) konvertiert werden.
Ansonsten: benutze Kevins Antwort
quelle
Convert.ToBoolean
akzeptiert nur True / True / False / False StringsSie können dieses Formular verwenden:
Oder einfacher (danke an Jurijs Kastanovs):
quelle
Wenn der Boolesche Wert nicht zurückgegeben wird, können Sie Folgendes tun:
quelle
Meine Lösung (vb.net):
quelle
quelle
Wenn Sie nicht konvertieren möchten. Verwenden Sie einfach;
Vielleicht geben Sie die Werte wie gewünscht zurück.
quelle