如何确定VB.net中是不是已经存在记录?
Posted
技术标签:
【中文标题】如何确定VB.net中是不是已经存在记录?【英文标题】:How to determine if a record already exists in VB.net?如何确定VB.net中是否已经存在记录? 【发布时间】:2016-08-02 09:33:05 【问题描述】:我正在用 Access 数据库做一个 VB,我想创建一个按钮。哪个保存按钮用于检查尝试插入的数据在哪里重复或不与我的数据库进行比较。
这是我的代码,问题是我输入的内容只是显示用户已经存在。
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
【问题讨论】:
""
在您的 SELECT 字符串中做了什么?
@Clavert 这里有一条不成文的规则:避免使用urgent
这个词。
@reporter:其实是very written;-)
。
不是所有的WHERE
子句都需要与AND
连接吗?
为什么不在表级别创建索引以防止重复?
【参考方案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 个字段是否对检查实际上很重要并导致返回意外的行。
我个人的下一步是:
-
在 AddWithValue 语句上设置断点并检查值
是你所期望的
使用 SSMS/Access 或等效项中的值运行查询,并检查返回的行是否符合您的预期
【讨论】:
以上是关于如何确定VB.net中是不是已经存在记录?的主要内容,如果未能解决你的问题,请参考以下文章
使用 vb.net 根据 SQL 数据库中存在的记录动态显示/隐藏 DataGrid 按钮列时遇到问题