防止插入重复数据记录(3列为1记录)-vb.net

时间:2014-09-17 20:46:56

标签: vb.net visual-studio sqlcommand

我正在执行插入功能,允许管理员为课堂预订目的创建时间段。列将是房间,时间和日期。如果我想防止重复插入数据?

例如:房间1,1pm,2014年7月12日可以插入两次。 我可以包含哪种查询来防止它? 这是我的代码:

    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    con.ConnectionString = 
    con.Open()
    cmd.Connection = con

    cmd.CommandText = "INSERT INTO [Room] ([room],[time],[date]) VALUES('" & ComboBox1.Text & "','" & ComboBox2.Text & "','" & DateTimePicker1.Text & "' )"
    cmd.ExecuteNonQuery()
    MsgBox("Classroom and time is opened for student to book!")
    con.Close()

1 个答案:

答案 0 :(得分:1)

您可以像这样使用MERGE T-SQL命令查询。 (Sql Server 2008)

cmd.CommandText = "MERGE INTO Room as Target " & _
      "USING (SELECT @rm as r, @tm as t, @dt as d) as Source " & _
      "ON Target.Room = Source.r AND Target.[time] = Source.t AND Target.[date] = Source.d " & _
      "WHEN NOT MATCHED THEN " & _
      "INSERT ([room],[time],[date]) VALUES (@rm, @tm, @dt);"

此查询在Room表中搜索输入与已存在记录之间的完全匹配。如果没有匹配则执行插入。如果有匹配则没有做任何事情。

如您所见,此查询不使用字符串连接作为上面的示例。因此,您还需要更改代码以使用参数化查询

cmd.Parameters.AddWithValue("@rm", ComboBox1.Text)
cmd.Parameters.AddWithValue("@tm", ComboBox2.Text)
cmd.Parameters.AddWithValue("@dt", DateTimePicker1.Text)
Dim rowInserted = cmd.ExecuteNonQuery()
If rowInserted > 0 Then
   MessageBox.Show("Row inserted")
else
   MessageBox.Show("Already booked")
End If

但这种做法引出了另一个问题 您确定自己的字段TimeDate(我建议更改这些名称)是NVARCHAR还是其他文字类型?。
它们似乎是DateTime,因此您需要传递具有适当日期类型的参数。