2010-09-03 4 views
0

J'ai une table comme celles-ci:l'insertion d'enregistrements à la base de données à partir de plusieurs cases à cocher vb.net

Club Table contient: ClubID (identité), nom, adresse

table Genre contient: GenreId et Genre

table contient ClubGenre ID club, GenreId

club a une relation un à plusieurs avec genre

J'ai créé une application f onctions comme un éditeur de base de données. J'ai un groupe de case à cocher contenu dans une boîte de groupe intitulée Genres. Il contient le genre dans la table Genre. Ce n'est pas databound cependant, je l'ai tapé manuellement. J'ai des problèmes avec mon bouton Ajouter/Enregistrer. Ce que je veux essentiellement essayer de faire est ce

  • Cliquez sur Nouveau bouton d'enregistrement
  • textboxes et cases à cocher sont activées
  • données d'entrée
  • cliquez sur Enregistrer
  • Insérer Nom et adresse dans la table club (Je sais comment le faire jusqu'à cette partie)

Depuis mon ClubID est IDENTITÉ, il sera généré automatiquement à droite. J'ai besoin de ce ClubID pour insérer des données dans ma table ClubGenre. Supposons que la case à cocher Pop 1 est cochée. Dans ma table de genre, il contient un enregistrement à savoir 1 GenreId et pop genre

Cela signifie ma déclaration d'insertion sera comme:

INSERT INTO Genre VALUES(*thenewlyaddedClubID*,1) 

Maintenant, si la case 1,3,5 sont vérifiés, il sera comme:

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

Je suis venu avec une solution à récupérer le nouveau ajouté ID CLUB mais ne peut pas le mettre tous ensemble encore. Je pense à mettre la nouvelle clubID dans une zone de texte caché utilisant l'instruction

SELECT MAX(clubID) AS barid FROM club 

Répondre

0

Utiliser le MAX (clubID) n'est pas sûr (nous ne pouvons pas être sûrs comment la base de données génère l'identification). Il est préférable d'obtenir le nouvel ID en fonction des autres valeurs (nom et adresse).

vous pouvez donc faire quelque chose comme ceci:

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 
+0

Je continue de recevoir des erreurs avec RunSQL. – Dumont

+0

Je pensais que vous savez comment exécuter un sql ... Ce n'est pas une fonction réelle, j'ai juste pris un raccourci dans l'exemple de code sur la façon d'exécuter le sql (au lieu de créer un objet connexion et d'exécuter une commande pour recevoir un lecteur objet etc ...) – awe

0

en utilisant la plus haute ID est sujette aux erreurs!

Vous pouvez récupérer le dernier ID inséré avec le @ @ IDENTITY, peut-être même mieux serait SCOPE_IDENTITY, qui renvoie le dernier ID dans la portée.

ici est un exemple de la 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 

modifier: voulez-vous vraiment utiliser pour le genre des cases à cocher? Pourquoi pas une combobox avec des genres et un bouton d'ajout, qui place les ID de club et les ID de genre dans une table d'aide séparée, de sorte que vous pouvez ajouter des genres sans changer l'interface ... juste sayin

Questions connexes