2016-08-02 3 views
-4

Я делаю VB с базой данных Access, и я хочу создать кнопку. Какой savebutton с проверкой, где данные, которые пытаются вставить, дублируются или не сравниваются с моей базой данных.Как определить, существует ли запись на VB.net?

Этот мой код, и проблема в том, что я вхожу в него, просто покажет, что пользователь уже существует.

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

Что такое '' '' 'в вашей строке SELECT? – Andre

+3

@Clavert Здесь существует неписаное правило: избегайте слова «срочно». – reporter

+0

@reporter: на самом деле [очень написано] (http://meta.stackoverflow.com/q/326569/472495) ';-)'. – halfer

ответ

1

Прежде всего взять быстрый взгляд на переменную theQuery, он может просто быть неправильный формат, где вы набрали его в SO, но если бы не попробовать:

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" 

Ваш чек для предварительно существующий пользователь основан на 5 полях, вставка для новых данных имеет 9 полей. Не зная бизнес-кейса, я не могу быть уверен, что это правильно или если недостающие 4 поля действительно важны для проверки и приводят к возврату неожиданных строк.

Лично мои следующие шаги были бы:

  1. Поставьте точку останова на показаниях AddWithValue и проверить значения являются то, что вы ожидаете
  2. выполнить запрос со значениями в SSMS/Access или эквивалент и проверки возвращаемые строки - это то, что вы ожидаете
Смежные вопросы