2016-08-02 4 views
-4

Ich mache eine VB mit Access-Datenbank und ich möchte eine Schaltfläche erstellen. Welcher savebutton mit dem Überprüfen, wo die Daten, die versuchen einzufügen, dupliziert werden oder nicht mit meiner Datenbank vergleichen.Wie kann festgestellt werden, ob in VB.net bereits ein Datensatz existiert?

Das ist mein Code, und das Problem ist, was auch immer ich es nur zeigen, der Benutzer existiert bereits.

Dim theQuery As String = "SELECT * FROM Table1 " & 
          "WHERE [Subject_Code] = @Subject_Code " & 
          "AND [Day] = @Day " & 
          "AND [Times] = @Times " & 
          "AND [Lecture] = @Lecture " & 
          "AND [Class_Room] = @Class_Room" 

Ihr Scheck für eine:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    MyConn = New OleDbConnection 
    MyConn.ConnectionString = connString 

    MyConn.Open() 
    If (ComboBox2.Text = "") And (ComboBox3.Text = "") 
     And (TextBox3.Text = "") And (ComboBox4.Text = "") 
    Then 
    MsgBox("Please fill-up all fields!") 
    Else 
    Dim theQuery As String = ("SELECT * FROM Table1 
     WHERE"" [Subject_Code][email protected]_Code ,[Day][email protected], 
       [Times][email protected] , [Lecture][email protected] and [Class_Room][email protected]_Room""") 

    Dim cmd1 As OleDbCommand = New OleDbCommand(theQuery, MyConn) 
    cmd1.Parameters.AddWithValue("@Subject_Code", TextBox6.Text) 
    cmd1.Parameters.AddWithValue("@Day", ComboBox2.Text) 
    cmd1.Parameters.AddWithValue("@Times", ComboBox3.Text) 
    cmd1.Parameters.AddWithValue("@Lecture", TextBox3.Text) 
    cmd1.Parameters.AddWithValue("@Class_Room", ComboBox4.Text) 

    Using reader As OleDbDataReader = cmd1.ExecuteReader() 
    If reader.HasRows Then 
    'User already exists 
    MsgBox("User Already Exist!") 
    Else 
    Dim Update As String = "INSERT INTO [Table1] 
    ([Subject_Code], [Subject], 
     [Day], [Times], [Level],[Semester], [Lecture],[Class], [Class_Room]) 
    VALUES (?,?,?,?,?,?,?,?,?)" 

    Using cmd = New OleDbCommand(Update, MyConn) 
     cmd.Parameters.AddWithValue("@p1", TextBox6.Text) 
     cmd.Parameters.AddWithValue("@p2", TextBox1.Text) 
     cmd.Parameters.AddWithValue("@p3", ComboBox2.Text) 
     cmd.Parameters.AddWithValue("@p4", ComboBox3.Text) 
     cmd.Parameters.AddWithValue("@p5", ComboBox1.Text) 
     cmd.Parameters.AddWithValue("@p6", ComboBox6.Text) 
     cmd.Parameters.AddWithValue("@p7", TextBox3.Text) 
     cmd.Parameters.AddWithValue("@p8", ComboBox5.Text) 
     cmd.Parameters.AddWithValue("@p9", ComboBox4.Text) 
     MsgBox("New Data Is Saved") 
     cmd.ExecuteNonQuery() 
    End Using 
    End If 
    End Using 
End If 
+3

Was machen die '' '' in Ihrem SELECT String? – Andre

+3

@Clavert Hier existiert eine ungeschriebene Regel: Vermeiden Sie das Wort "dringend". – reporter

+0

@reporter: es ist tatsächlich [sehr geschrieben] (http://meta.stackoverflow.com/q/326569/472495) ';-)'. – halfer

Antwort

1

Zunächst einmal einen kurzen Blick auf Ihre theQuery Variable nehmen, kann es nur haben, von wo aus Sie es in SO eingegeben haben, aber wenn sie nicht versuchen malformed worden Vorhandener Benutzer basiert auf 5 Feldern, die Einfügung für neue Daten hat 9 Felder. Ohne den Geschäftsfall zu kennen, kann ich nicht sicher sein, ob dies richtig ist oder ob die fehlenden 4 Felder tatsächlich für die Überprüfung wichtig sind und unerwartete Zeilen zurückgegeben werden.

persönlich würde meine nächsten Schritte:

  1. einen Haltepunkt auf den AddWithValue Aussagen Put und überprüfen Sie die Werte sind, was Sie
  2. Führen Sie die Abfrage mit den Werten in SSMS/Access oder gleichwertig und Kontrolle erwarten die Zeilen, die zurückkommen, sind das, was du erwartest
Verwandte Themen