Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定VB.net中是否已经存在记录?_Vb.net_Ms Access - Fatal编程技术网

如何确定VB.net中是否已经存在记录?

如何确定VB.net中是否已经存在记录?,vb.net,ms-access,Vb.net,Ms Access,我正在用Access数据库做一个VB,我想创建一个按钮。哪个savebutton检查尝试插入的数据在何处重复或与我的数据库不比较 这是我的代码,问题是无论我输入什么,它只显示用户已经存在 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MyConn = New OleDbConnection MyConn.ConnectionString = connString

我正在用Access数据库做一个VB,我想创建一个按钮。哪个savebutton检查尝试插入的数据在何处重复或与我的数据库不比较

这是我的代码,问题是无论我输入什么,它只显示用户已经存在

 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]=@Subject_Code ,[Day]=@Day, 
              [Times]=@Times , [Lecture]=@Lecture and [Class_Room]=@Class_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

首先,快速查看您的theQuery变量,它可能只是从您键入它的位置发生了格式错误,但如果不尝试:

  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个字段是否对检查非常重要,并导致返回意外的行

就我个人而言,我的下一步将是:

  • 在AddWithValue语句上放置断点并检查值 这就是你所期望的
  • 使用SSMS/Access或等效项中的值运行查询,并检查返回的行是否符合预期

  • 在您选择的字符串中做了什么?@Clavert这里有一条不成文的规则:避免使用
    紧急
    。@reporter:它实际上是
    ;-)
    。所有那些
    WHERE
    子句不都需要与
    连接吗?为什么不在表级别创建索引以防止重复?