2017-05-17 2 views
0

Ich arbeite an einem Projekt, für das eine Registrierungsoption erforderlich ist. Ich habe bereits ein Formular erstellt, das ein Benutzer ausfüllen kann und erfolgreich in der Datenbank speichert, wenn jedes Textfeld ausgefüllt wurde. Ich muss einige von ihnen optional haben.C# Registrierungsformular: Optionale Textfelder

private void button1_Click(object sender, EventArgs e) 
    { 

     Registercar(textBox1.Text, textBox2.Text, Convert.ToInt32(textBox3.Text)); 
    } 

    private static void Registercar(string make, string model, int year) 
    { 
     var con = GetConnection(); 
     try 
     { 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandText = "INSERT INTO user_car (ID,make,model,year) VALUE (@ID, @make, @model, @year)"; 
      cmd.Prepare(); 
      cmd.Parameters.AddWithValue("@ID", 0); 
      cmd.Parameters.AddWithValue("@make", make); 
      cmd.Parameters.AddWithValue("@model", model); 
      cmd.Parameters.AddWithValue("@year", year); 
      cmd.ExecuteNonQuery(); 
      if (con !=null) { con.Close(); }; 

      MessageBox.Show("Car successfully registered"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(Convert.ToString(ex)); 
     } 
     finally 
     { 
      con.Close(); 
     } 
    } 

Der obige Code ist der Teil des Registers, in dem der Benutzer die Möglichkeit hat, ein Auto zu registrieren, die auf ihr Konto gebunden werden. Wenn sie das Hinzufügen eines Autos wählen, müssen sie die Marke und das Modell eingeben, während das Jahr optional ist. Wenn sie alle Informationen eingeben, werden die Informationen erfolgreich in der Datenbank gespeichert.

jedoch Wenn ich versuche, das Jahr Option leer zu lassen, erhalte ich folgende Fehlermeldung: „Eine nicht behandelte Ausnahme des Typs‚System.FormatException‘ist in mscorlib.dll aufgetreten

Zusätzliche Informationen: Eingabezeichenfolge war nicht in einem korrekten Format. "

Das sagt mir, dass ich es höchstwahrscheinlich nicht lassen darf, es leer zu lassen. Ich habe versucht, verschiedene Optionen herauszufinden, bei denen ich es leer lassen und die anderen Informationen immer noch in der Datenbank speichern könnte. Die erste Option, die ich versuchte, kam aus diesem Beitrag: How can we declare Optional Parameters in C#.net? Ich habe versucht, das Jahr optional zu machen, um einen Standardwert zu meinem Jahr Parameter Eingabe:

private static void Registercar(string make, string model, int year = 0) 

jedoch noch ich nach wie vor die gleichen Fehler. Die nächste Option, die ich ausprobierte, kam von diesem Beitrag: How can you use optional parameters in C#? Die erste Antwort war die gleiche wie die vorherige, setzen Sie den Parameter auf einen festgelegten Wert. Eine andere Antwort weiter unten schlug vor, "System.Runtime.InteropServices" zu verwenden und den Parameter auf [Optional] zu setzen. Ich habe es versucht, aber ich bekomme den gleichen Fehler wie zuvor. Ich dachte, dass es mit der Tatsache zu tun hatte, dass ich versuche, String in einen int zu konvertieren und zu leeren. Eine schnelle Suche führte mich zu diesem Beitrag: Convert string to integer Hier habe ich gesagt, ich versuche ich kann int.Parse zu verwenden, so dass ich es einrichten wie diese

private void button1_Click(object sender, EventArgs e) 
    { 
     int year = int.Parse(textBox3.Text.Trim()); 
     Registercar(textBox1.Text, textBox2.Text, year); 

    } 

gleichen Fehler wie zuvor. Weiter habe ich versucht, die „Int32.TryParse()“, der überprüft, wenn die Zeichenfolge ein int enthält, wenn nicht, Ausgabe einen Integer-Wert

private void button1_Click(object sender, EventArgs e) 
    { 
     int year; 
     string str = textBox3.Text.Trim(); 
     Registercar(textBox1.Text, textBox2.Text, Int32.TryParse(str, out year); 

    } 

Jetzt ist es mir sagt, ich kann nicht konvertieren von ‚Bool‘ auf ' int '

An diesem Punkt habe ich fast fast aufgegeben.

Die Sache, die zur Zeit funktioniert, ist, dass, wenn jede Box ausgefüllt ist, es erfolgreich die Informationen in der Datenbank speichert. Allerdings brauche ich einige der Textfelder, die optional sind, und ich kann das nicht zum Funktionieren bringen.

Es tut mir leid für die lange Post. Ich hoffe, dass jemand in der Lage ist, mit einem Vorschlag zu helfen, oder zu kommen :)

Antwort

0

Korrigieren Sie mich, eine reelle Zahl ist, wenn ich falsch bin, Aber ich denke, dein einziges Problem ist die Umwandlung von Text in String. Einige Parameter optional zu machen, ist hier nicht wirklich notwendig.

int.TryParse() ist ein Weg zu gehen, aber Sie verwenden es falsch. TryParse gibt bool zurück, was bedeutet, dass die Konvertierung erfolgreich ist (Wert true) oder nicht (Wert false). Integer-Wert ist in out Variable. So verwenden Sie es in Ihrem Fall versuchen, etwas wie folgt aus:

private void button1_Click(object sender, EventArgs e) 
{ 
    int year; 
    string str = textBox3.Text.Trim(); 
    //if parsing isn't successful, year will be set as 0 
    if (!int.TryParse(str, out year)) 
    { 
     //notice user that that isn't correct value for year 
     year = 0; 
    } 
    //no need for else, year now contains int value but beware, it can be value from 0 to 2147483647 

    Registercar(textBox1.Text, textBox2.Text, year)); 

} 

wenn Sie weitere Fragen haben über „optional“ Parameter oder zusätzliche Handhabung dieser year Wert, fragen sich frei fühlen. Oder redigiere deine ursprüngliche Frage.

EDIT:

null oder nothing in die Datenbank einfügen, wenn Jahr == 0, Sie Parameter wie dies passieren kann:

if (year != 0) 
    cmd.Parameters.AddWithValue("@year", year); 
else 
    cmd.Parameters.AddWithValue("@year", DBNull.Value); 
+0

ich sehe. Ich habe den int.TryParse falsch benutzt, das macht jetzt Sinn und ich habe es zum Laufen gebracht. Danke vielmals :). Schnelle Frage, kann ich das Jahr als leere Zeichenfolge festlegen? Also in meiner Datenbank, unter "Jahr" wäre es nur leer anstatt "0" zu zeigen? –

+0

Ich habe meine Antwort bearbeitet. Btw, um "Danke" zu sagen, kannst du meine Antwort als Lösung markieren;) – Nino

+0

Ahh ja, tut mir leid. Ich habe in der Zwischenzeit an etwas anderem gearbeitet und habe es vergessen :) Danke nochmal! –

0

die int.TryParse Methode können Sie prüfen, ob das Jahr wie diese

int nYear=0; 
if(int.TryParse(txtYear.Text, out nYear) 
{ 
    //the value is a number 
    //Also the nYear vairable has the numeric integer value 
    // you can use it 
} 
else 
{ 
    //The value isn't a number 
}