C#.net Windows-Anwendung - Input-Daten zu überprüfen, bevor einfügen in Datenbank

Ich bin der Buchung system.

Ich kann nicht herausfinden, die Validierungs-Algorithmus für eine Reihe von Daten vor dem einfügen in die DB.
Der Primärschlüssel wird die Buchungs-ID, die automatisch generiert durch das system.

Brauche ich, um zu validieren, bdate, btime und sname. (bdate=Buchung, btime=der Buchung, und sname=Mitarbeiter-name)

Im Falle der bdate, btime und sname ist dasselbe wie das, was die client-Eingang. das system warnt seine doppelte als die Mitarbeiter bereits haben-Buchung auf das Datum und die Uhrzeit ein.

Finden Sie meine insert-Abfrage an unten und geschätzt werden, können Sie zeigen Sie mir den richtigen Weg.

 private void btn_save_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        //query for duplicate
        cmd.CommandText = "select count(*) from Booking where sname = @newName and bdate = @newDate and btime = @newTime";
       //cmd.Parameters.Add("@newName", OleDbType.VarChar).Value = txt_cname.Text;
        //cmd.Parameters.Add("@newDate", OleDbType.DBDate).Value = dtp_bdate.Value.Date;
       //cmd.Parameters.Add("@newTime", OleDbType.VarChar).Value = dtp_btime.Value.ToString("hh:mm tt");

        cmd.CommandText = "insert into Booking(cname, bdate, btime, ccontact, sname) Values('" + txt_cname.Text + "','" + dtp_bdate.Value.Date + "','" + dtp_btime.Value.ToString("hh:mm tt") + "','" + txt_ccontact.Text + "','" + txt_sname.Text + "')";
        cmd.Connection = myCon;
        myCon.Open();

        int recordCount = Convert.ToInt32(cmd.ExecuteScalar());

        myCon.Close();

        if (recordCount>0)

        {
            //handle duplicates
            MessageBox.Show("Duplicated", "My Application",
            MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
        }

       //cmd.Connection = myCon;
        //myCon.Open();
       //cmd.ExecuteNonQuery();
        //myCon.Close();
        //MessageBox.Show(dtp_bdate.Value.ToString());
        //MessageBox.Show("Booking completed", "My Application",
       //MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
    }
  • Sie haben Zugang zu der Datenbank? Eine UNIQUE-Einschränkung wäre viel einfacher, zu beschäftigen, auf diese drei Felder. Es sei denn, der Buchung des gleichen Kunden zweimal auf den gleichen Tag/Zeit gültig ist.
  • verwenden Sie sql Parameter zu vermeiden, sql-Injektionen, können Sie gespeicherte Prozeduren verwenden, und überprüfen Sie, ob Daten vorhanden sind, und werfen sql-exception anderes einfügen von Daten
  • Übrigens, Sie haben sich Links öffnen sich nicht nur zu schweren injection-Angriffe, aber auch dumme kleine Fehler. Wenn der name des Kunden ist Bill O ' Reilly, deine Abfrage einen Fehler.
  • Ich werde zu erraten, dass Ihre Datenquelle Zugreifen? Ansonsten, warum sind Sie mithilfe von OleDb?
  • Anstatt zu warten, bis die sql zu einem Fehler, da die eindeutigen index, warum nicht versuchen, ein wählen Sie zuerst? Dies wird auch ermöglichen es Ihnen, ändern Sie die Buchung, wenn nötig.
  • Haben Sie sich überlegt mit Entity Framework oder LinqToSQL als ORM für Ihre Lösung? Mit einem von diesen erheblich vereinfachen Ihre Aufgaben Daten-Validierung und Daten-Zugriff für diese Angelegenheit.
  • Wenn Sie select count verfügbar ist, dann nur einfügen, wenn die vorhandenen Zahl auf die Felder null ist. wenn count = fügen. Und wie andere darauf hingewiesen. Immer Parameter verwenden, und nicht inline-build-string der Abfrage.
  • Sie können try/catch in SQL zu behandeln, die INSERT. Das hält das prüfen und einfügen als eine Atomare operation.

InformationsquelleAutor Gary Yee | 2012-06-12
Schreibe einen Kommentar