Autor Beitrag
Svenni9991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 28.05.13 09:41 
Guten morgen alle zusammen,

ich bräuchte einmal kurz Hilfe.
Entweder bin ich gerade noch halb am schlafen und komme von selbst nicht auf die Lösung oder es liegt an den Möglichkeiten.

Zu meinem Problem: Ich habe ein Formular in meiner ASP.NET - Webanwendung welches Daten in eine Datenbank einträgt.
In dem Formular sind Textboxen. Eine davon heißt z.B. monitor_garantiedauer.
Die Garantiedauer habe ich in der Datenbank als integer hinterlegt (die Garantiedauer kann NULL sein, wenn z.B. keine Garantie mehr vorhanden ist).

Nun habe ich mein Formular und trage dort meine Daten ein (Datei monitor.aspx). Da bei einigen Geräten die Garantie nicht mehr existiert lasse ich dieses Feld leer.
Eigentlich sollte dann in der Datenbank ein NULL stehen, allerdings bekomme ich die Fehlermeldung "Die Eingabezeichenfolge hat das falsche Format.".
Diese Fehlermeldung kann nur davon kommen dass das Feld leer ist.

Jetzt habe ich mir gedacht das ich ja per if else (in der monitor.aspx.cs Datei ; nach drücken des Buttons) prüfen kann ob die Textbox leer ist. Wenn sie leer ist soll der Wert NULL gesetzt werden, wenn etwas eingetragen wurde soll dies in die Datenbank geschrieben werden.
Und da kommt mein Problem in's Spiel: ich weiß nämlich nicht wie ich das bewerkstelligen soll.
Ich war schon so weit und habe folgendes geschrieben:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
            
if (monitor_garantiedauer != null)         //Wenn die Textbox "monitor_garantiedauer" leer ist
{              //Dann
monitorInv.setGarantiedauer(Convert.ToInt32("NULL"));  //Soll Garantiedauer NULL gesetzt werden

//monitorInv.setGarantiedauer
//  int garantie;  
//      public int getGarantie()
//  {
//      return garantie;
//  }
//--Datenbankverbindung----------
//      public void verbindungMonitor()
//  {
//  SqlConnection con = new SqlConnection();
//  con.ConnectionString = "Data Source=Datenbankpfad;" + "Initial Catalog=INVENTAR;" + "Persist Security Info=True;" + "User ID=test;" + "Password=test";
//  SqlCommand cmd = new SqlCommand();
//  cmd.Connection = con;
//  con.Open();
//  cmd.CommandText = "INSERT INTO Monitor VALUES('" + this.modell + "' , '" + this.seriennummer + "' , " + this.groesse + " , '" + this.beschreibung + "' , '" + this.kaufdatum + "' , " + this.garantie + ")";
//  cmd.ExecuteNonQuery();
//  con.Close();
}
 public void setGarantie(int garantie)
{
this.garantie = garantie;
}
}
else
{
monitorInv.setGarantiedauer(Convert.ToInt32(monitor_garantiedauer.Text));
}


Hierbei ist dann aber mein Problem das ich das "NULL" am Anfang ja aber nicht in den integer bekomme und wenn ich es als string dort stehen lasse ist es ja der falsche Dateityp.
Hat jemand eine Idee wie ich das Problem lösen kann? Das selbe Problem habe ich dann nämlich auch bei den DateTime-Typen (bei mir für das Kaufdatum festgelegt).

Ich wäre euch sehr dankbar :)

Mit freundlichen Grüßen
Svenni9991


Moderiert von user profile iconChristian S.: Topic aus ASP.NET und Web verschoben am Di 28.05.2013 um 10:19
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 28.05.13 10:02 
Ein Integer in .Net hat immer einen Wert der kann nicht NULL sein. Wenn du auch NULL zulassen willst mußt du einen entsprechenden nullable Datentyp verwenden (hier Int?).

Aber dein auskommentierter Code wird so nicht funktionieren wenn du die Daten so in die DB übernehemen willst. Du quotest immer den Wert mit Hochkommata heißt es kommt zumindest immer ein Leerstring dort an (der dann knallt) aber nie null ist. Du mußt schon explizit ein ungequotetes NULL an die Datenbank senden. Du solltest dir besser ansehen wie man in SQL Parameter benutzt und nicht versuchen einen String passend zusammenzubasteln. Bei nulls oder zum Beispiel bei der richtigen Formatierung von Datumswerten wirst du so nur ins schleudern kommen. Von Securityproblemen mal ganz abgesehen. MIt Parametern ist das sauber gekapselt und du mußt da nichst ~basteln~.