2016-05-02 14 views
0

Ich versuche, einen Zeitstempel zu implementieren, der innerhalb einer MS Access 2013-Tabelle innerhalb einer C# -App mit .NET Framework und Visual Studio 2013 gehen würde Um zu protokollieren, wer sich in meiner App angemeldet hat, bekomme ich einen Fehler, dass meine INSERT INTO-Anweisung ein Syntaxproblem hat, aber wenn ich die Timestamp-Parameter alle zusammen entferne und den datetimepicker nicht mehr verwende, wird die App es schaffen Fügen Sie den Benutzernamen und das Passwort mit Erfolg in die Datenbank ein. Ich vermute also, dass ein Kompatibilitätsproblem zwischen dem Date/Time-Feld von ms access 2013 und dem Wert des datetimepicker-Tools im Visual Studio-Framework besteht. So, jetzt frage ich Sie, was ist die beste Methode, um das aktuelle korrekte Datum und Uhrzeit zu bekommen und es in die genannte Datenbank einzufügen? Ich habe versucht, das Feld als kurzen Text festzulegen und die Eigenschaft now von datetime .ToString zu setzen, die auch nicht funktioniert.C#: Value-Eigenschaft von DateTimePicker nicht kompatibel mit Datum/Uhrzeit von MS Access-Datenbank 2013

private void loginButton_Click(object sender, EventArgs e) 
    { 
     using (OleDbConnection connect = new OleDbConnection(ConfigurationManager.ConnectionStrings["LibrarieConectare"].ConnectionString)) 
     { 
      OleDbCommand command = connect.CreateCommand(); 
      OleDbCommand _logins = connect.CreateCommand(); 
      dateTimePickerBirthAngajat.Value = DateTime.Now; 
      command.Parameters.AddWithValue("@user", textBoxAccount.Text); 
      command.Parameters.AddWithValue("@pass", textBoxParola.Text); 
      _logins.Parameters.AddWithValue("@utilizator", textBoxAccount.Text); 
      _logins.Parameters.AddWithValue("@parola", textBoxParola.Text); 
      _logins.Parameters.AddWithValue("@datetime", dateTimePickerBirthAngajat.Value); 
      command.CommandText = "SELECT IDAngajat FROM Angajati WHERE [email protected] AND [email protected]"; 
      _logins.CommandText = "INSERT INTO Logins (Utilizator, Parola, TimeStamp) VALUES (@utilizator, @parola, @datetime)"; 

      connect.Open(); 

      try 
      { 
       using (OleDbDataReader dr = command.ExecuteReader()) 
       { 
        if (dr.HasRows) 
        { 
         this.DialogResult = DialogResult.OK; 
         user = textBoxAccount.Text; 
         parola = textBoxParola.Text; 
         if (rememberMe.Checked == true) 
         { 
          _logins.ExecuteNonQuery(); 
         } 
        } 
        else 
        { 
         this.DialogResult = DialogResult.Cancel; 
         MessageBox.Show("Login failed!"); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Eroare baza de date: " + ex); 
      } 
      finally 
      { 
       this.Close(); 
      } 
     } 
    } 

Antwort

1

ausdrücklich Versuchen Sie Ihr Date als DateTime Objekt Parsen statt über die DateTime.Parse() Methode in einer Reihe von übergeben:

// Parse your date as an actual Date 
DateTime date = DateTime.Parse(dateTimePickerBirthAngajat.Value); 
// Pass that parameter along to be executed 
_logins.Parameters.AddWithValue("@datetime", date); 

Je nachdem, wie Ihr Datum formatiert ist, können Sie tatsächlich die DateTime.ParseExact() verwenden müssen Methode, die es Ihnen ermöglicht, eine Formatierungszeichenfolge anzugeben (zB "MM/TT/JJJJ", "JJJJ-MM-TT" usw.), um anzugeben, wie Ihre Zeichenfolge analysiert werden soll.

+0

Nach einigem Suchen habe ich habe herausgefunden, dass meine SQL-Abfrage einen Keywo verwendet rd dass der Zugriff für die Kommunikation mit der Datenbank über Abfragen verwendet wurde, was das Wort "TimeStamp" war, also musste ich folgendes schreiben: "[TimeStamp]", aber deine Antwort löste mein Problem beim Parsing des Datums in einem korrekten Format meine Bedürfnisse. Vielen Dank! –

+1

Die Eigenschaft [DateTimePicker # Value] (https://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.value%28v=vs.110%29.aspx) ist bereits eine 'DateTime 'Daher ist die Verwendung von' DateTime.Parse' nicht sinnvoll. –