2012-03-31 12 views
0

Ich versuche, einen Datumswert von YYYY/MM/DD von einem Textfeld in Datetime zu konvertieren, wenn der Wert korrekt ist, ist es in Ordnung, aber wenn ich es versuchte Geben Sie eine falsche Daten ein, um mit der Datenbank zu überprüfen, die Fehlermeldung wird zurückgegeben, da String nicht als gültige DateTime erkannt wurde.DateTime.Parse Konvertieren von Zeichenfolge in DateTime-Format entspricht DateTime-Feld in Datenbank

Hier ist mein Code:

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     string format = "YYYY-MM-DD HH:MM:SS"; 
     DateTime birthday = DateTime.Parse(txtBday.Text); 
     DataSet ds = new DataSet(); 
     ds = (newService.checkAccount()); 
     if (ds.Tables[0].Rows.Count > 0) 
     { 
      foreach (DataRow dRow in ds.Tables[0].Rows) 
      { 
       string accountNo = dRow["ACCTNO"].ToString(); 
       DateTime birthDate = DateTime.Parse(dRow["DATEOFBIRTH"].ToString()); 
       if (accountNo == txtAccountNo.Text.ToString() && birthDate == birthday) 
       { 
        lblMessage.Text = "<br>Account Number Exist. You may now proceed with the registration<br><br>"; 
        HttpCookie lmsCookie = new HttpCookie("id"); 
        lmsCookie.Value = txtAccountNo.Text; 
        Response.Cookies.Add(lmsCookie); 
        Response.Redirect("Step2.aspx"); 
       } 
       else 
       { 
        Image2.Visible = false; 
        lblMessage.Text = "<br>Please check your information and try again." + "<br>Be sure you are entering the correct information.For further assistance, call (+632) 404-2790.<br><br>"; 
       } 
      } 
     } 
    } 

Zum Beispiel hat ich ein Datum eingeben, die in der Datenbank übereinstimmen, wird das Programm geht sonst, wenn ich ein Datum eingeben werde, die nicht mit irgend überein die vorhandenen Datensätze in der Datenbank, wird das Programm einen Fehler auslösen, String wurde nicht als gültige Datetime erkannt.

Antwort

3

Wenn Sie das Parsen kann aus einem Grund fehlschlagen andere als ein Fehler, statt dies:

DateTime birthDate = DateTime.Parse(dRow["DATEOFBIRTH"].ToString()) 

(die eine Ausnahme auslöst, wie Sie gesehen haben), verwenden DateTime.TryParse:

DateTime birthDate; 
if (DateTime.TryParse(dRow["DATEOFBIRTH"].ToString(), out birthDate)) 
{ 
    // Success case 
} 
else 
{ 
    // Handle error case 
} 

Ich bemerke, dass Sie nicht mit Ihre format Variable übrigens sind. Wenn Sie wissen, was das Format sein wird (und Ihre Frage nicht einverstanden mit Ihrem Code, btw) wäre es besser, verwenden TryParseExact:

if (DateTime.TryParseExact(dRow["DATEOFBIRTH"].ToString(), "YYYY/MM/dd", 
          CultureInfo.InvariantCulture, DateTimeStyles.None, 
          out birthDate)) 
... 
+0

Jon, fixieren den Namen TryParse -> TryParseExact – asktomsk

+0

@asktomsk: Doh :) Fertig. –

+0

können Sie kurz erklären oder geben Sie mir einen Beispielcode, um das zu tun? – Dhenn

0

Auf jeden Fall wird es eine Ausnahme auslösen, wenn ein nicht unterstütztes Format versucht, in konvertieren eine Datetime. Bevor Sie also konvertieren, sollten Sie es mit der Methode DateTime.TryParse analysieren.

0

Sovel,

Schritt 1:

this._checkInOutDTO.NgayCham = DateTime.Parse (this.DGVDuLieuVaoRa.Rows [num15] .Cells [1] .Value.ToString()); // this._checkInOutDTO.NgayCham = Convert.ToDateTime (this.DGVDuLieuVaoRa.Rows [num15] .Cells [1] .Value.ToString());

Schritt 2: Format: TT/MM/yyyy

Verwandte Themen