从vb.net中的多个复选框将记录插入数据库

时间:2010-09-03 08:29:55

标签: sql vb.net

我有一张这样的表:

俱乐部表包含:ClubID(IDENTITY),姓名,地址

流派表包含:GenreID和流派

ClubGenre表包含俱乐部ID,GenreID

Club与Genre有一对多的关系

我创建了一个功能类似于数据库编辑器的应用程序。我有一组复选框包含在标有Genres的组框中。它包含Genre表中的类型。这不是数据包,我手动输入。我的添加/保存按钮出现问题。我基本上要做的就是这个

  • 点击新记录按钮
  • 将启用文本框和复选框
  • 输入数据
  • 点击保存
  • 在俱乐部表格中插入姓名和地址(我知道如何完成此部分)

由于我的ClubID是IDENTITY,因此它会自动生成。我需要这个ClubID才能将数据插入我的ClubGenre表格。

假设选中标记为Pop的复选框1。在我的流派表中,它包含一条记录,即1作为genreID,Pop作为流派

这意味着我的insert语句将如下:

INSERT INTO Genre VALUES(*thenewlyaddedClubID*,1)

现在,如果选中复选框1,3,5,它将类似于:

INSERT INTO Genre VALUES(*thenewlyaddedClubID*,1)
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,3)
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,5)

我已经找到了一个检索新添加的CLUB ID的解决方案,但还不能将它们全部放在一起。我正在考虑使用语句

将新的clubID放入隐藏的文本框中
SELECT MAX(clubID) AS barid FROM club

2 个答案:

答案 0 :(得分:0)

使用最高ID很容易出错!

您可以使用@@ IDENTITY检索最后插入的ID,可能更好,但SCOPE_IDENTITY会返回范围内的最后一个ID。

这是MSDN的一个例子:

USE AdventureWorks2008R2;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO

编辑:你真的想使用这个类型的复选框吗?为什么不使用带有流派的组合框和一个添加按钮,将clubID和GenreID放入一个单独的帮助表中,以便以后可以在不改变界面的情况下添加流派...只需说明

答案 1 :(得分:0)

使用MAX(clubID)是不安全的(我们无法确定数据库如何生成ID)。最好根据其他值(名称和地址)获取新ID。

所以你可以这样做:

Sub Add()
  '' // Do the insert to club table here

  '' // Get the new clubID:
  Dim sql As String = "SELECT clubID FROM Club WHERE Name='{0}' AND Address='{1}'"
  Dim clubId As Integer = ''RunTheSQl...(String.Format(sql, Name.Text , Address.Text)

  If Genre1.Checked Then
    sql = "INSERT INTO ClubGenre VALUES({0}, 1)"
    ''...RunTheSql...(String.Format(sql, clubId)
  End If  
End Sub