2010-02-05 7 views
0

de Good Morning Stack Overflow,Essayer d'insérer dans plusieurs tables via des formulaires de page Web (SQL, ASP.net)

Je suis nouveau à asp.net et un problème que je suis en train de régler, peut-être tu peux aider?

Le résultat que je cherche est que les données vont dans CANRADcontacts et CANRADcollreg qui partagent un ID commun.

Je suis en train de remplir la base de données via un formulaire Web, et ne peut pas tout à fait obtenir le SQL correct, s'il vous plaît voir cet exemple;

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     'Vars 

     Dim FlightDateArriveString As String = (FlightMonthArrive.SelectedValue.ToString & "/" & FlightDayArrive.SelectedValue.ToString & "/" & "2010") 
     Dim FlightDateDepartString As String = (FlightMonthDepart.SelectedValue.ToString & "/" & FlightDayDepart.SelectedValue.ToString & "/" & "2010") 
     Dim FlightDateArrive As DateTime 
     Dim FlightDateDepart As DateTime 
     FlightDateArrive = Convert.ToDateTime(FlightDateArriveString) 
     FlightDateDepart = Convert.ToDateTime(FlightDateDepartString) 

     'Setup db connection 
     Dim CollID As Integer = 1 
     Dim connstring As String = WebConfigurationManager.ConnectionStrings("ConnectionString").ToString() 
     Dim conn As SqlConnection = New SqlConnection(connstring) 

Dim sql As String = ("INSERT INTO [CANRADcontacts]") & _ 
     (" ([Title], [Initials], [FirstName], [LastName], [Organisation], [Department], [Address], [Code],") & _ 
     (" [Telephone], [WorkTelephone], [Fax], [CellularTelephone],[Email], [ResearchFocus], [CollID], [ResearchFunders])") & _ 
     (" VALUES (@Title, @Initials, @FirstName, @LastName, @Organisation, @Department, @Address, @Code, ") & _ 
     ("@Telephone, @WorkTelephone, @Fax, @CellularTelephone, @Email, @ResearchFocus, @CollID, @ResearchFunders) ") & _ 
     ("[CANRADcollreg]([CollID], [FlightDateArrive], [FlightNameArrive], [FlightTimeArrive], [FlightDateDepart], [FlightNameDepart], [FlightTimeDepart], [AttendingLaunch], [Accomodation], [DietaryRequirements], [SpecificDietaryRequirement]) ") & _ 
     ("VALUES (@CollID, @FlightDateArrive, @FlightNameArrive, @FlightTimeArrive, @FlightDateDepart, @FlightNameDepart, @FlightTimeDepart, @AttendingLaunch, @Accomodation, @DietaryRequirements, @SpecificDietaryRequirement)") 

     Dim comm As New SqlCommand(sql, conn) 

     's1 
     comm.Parameters.Add("@Title", SqlDbType.VarChar) 
     comm.Parameters.Add("@Initials", SqlDbType.VarChar) 
     comm.Parameters.Add("@FirstName", SqlDbType.VarChar) 
     comm.Parameters.Add("@LastName", SqlDbType.VarChar) 
     comm.Parameters.Add("@Organisation", SqlDbType.VarChar) 
     comm.Parameters.Add("@Department", SqlDbType.VarChar) 
     comm.Parameters.Add("@Address", SqlDbType.VarChar) 
     comm.Parameters.Add("@Code", SqlDbType.VarChar) 
     comm.Parameters.Add("@Telephone", SqlDbType.VarChar) 
     comm.Parameters.Add("@WorkTelephone", SqlDbType.VarChar) 
     comm.Parameters.Add("@Fax", SqlDbType.VarChar) 
     comm.Parameters.Add("@CellularTelephone", SqlDbType.VarChar) 
     comm.Parameters.Add("@Email", SqlDbType.VarChar) 
     comm.Parameters.Add("@ResearchFocus", SqlDbType.VarChar) 
     comm.Parameters.Add("@CollID", SqlDbType.VarChar) 
     comm.Parameters.Add("@ResearchFunders", SqlDbType.VarChar) 

     's2 
     comm.Parameters.Add("@FlightDateArrive", SqlDbType.DateTime) 
     comm.Parameters.Add("@FlightNameArrive", SqlDbType.VarChar) 
     comm.Parameters.Add("@FlightTimeArrive", SqlDbType.VarChar) 
     comm.Parameters.Add("@FlightDateDepart", SqlDbType.DateTime) 
     comm.Parameters.Add("@FlightNameDepart", SqlDbType.VarChar) 
     comm.Parameters.Add("@FlightTimeDepart", SqlDbType.VarChar) 
     comm.Parameters.Add("@AttendingLaunch", SqlDbType.VarChar) 
     comm.Parameters.Add("@Accomodation", SqlDbType.VarChar) 
     comm.Parameters.Add("@DietaryRequirements", SqlDbType.VarChar) 
     comm.Parameters.Add("@SpecificDietaryRequirement", SqlDbType.VarChar) 

     'bind1 
     comm.Parameters("@Title").Value = TitleDD.SelectedItem.ToString 
     comm.Parameters("@Initials").Value = Initials.Text 
     comm.Parameters("@FirstName").Value = FirstName.Text 
     comm.Parameters("@LastName").Value = LastName.Text 
     comm.Parameters("@Organisation").Value = Organisation.Text 
     comm.Parameters("@Department").Value = DeptDiv.Text 
     comm.Parameters("@Address").Value = PostalAddress.Text 
     comm.Parameters("@Code").Value = Code.Text 
     comm.Parameters("@Telephone").Value = Telephone.Text 
     comm.Parameters("@WorkTelephone").Value = WorkTelephone.Text 
     comm.Parameters("@Fax").Value = Fax.Text 
     comm.Parameters("@CellularTelephone").Value = CellularTelephone.Text 
     comm.Parameters("@Email").Value = EmailAddress.Text 
     comm.Parameters("@ResearchFocus").Value = ResearchFocus.Text 
     comm.Parameters("@CollID").Value = CollID 
     comm.Parameters("@ResearchFunders").Value = ResearchFunders.Text 

     'bind2 
     comm.Parameters("@FlightDateArrive").Value = FlightDateArrive 
     comm.Parameters("@FlightNameArrive").Value = FlightNameArrive.Text 
     comm.Parameters("@FlightTimeArrive").Value = FlightTimeArrive.Text 
     comm.Parameters("@FlightDateDepart").Value = FlightDateDepart 
     comm.Parameters("@FlightNameDepart").Value = FlightNameDepart.Text 
     comm.Parameters("@FlightTimeDepart").Value = FlightTimeDepart.Text 
     comm.Parameters("@AttendingLaunch").Value = AttendingMarch23.SelectedValue.ToString 
     comm.Parameters("@Accomodation").Value = Transport.SelectedValue.ToString 
     comm.Parameters("@DietaryRequirements").Value = Dietary.SelectedValue.ToString 
     comm.Parameters("@SpecificDietaryRequirement").Value = SpecificDietary.Text 


     conn.Open() 
     comm.ExecuteScalar() 
     conn.Close() 

    End Sub 

Merci d'avance, toute aide grandement appréciée !!

Répondre

1

Le problème est dans votre instruction SQL - vous devez avoir deux instructions INSERT, une pour chaque table (notez le point-virgule qui sépare les deux instructions).

Dim sql As String = ("INSERT INTO [CANRADcontacts]") & _ 
     (" ([Title], [Initials], [FirstName], [LastName], [Organisation], [Department], [Address], [Code],") & _ 
     (" [Telephone], [WorkTelephone], [Fax], [CellularTelephone],[Email], [ResearchFocus], [CollID], [ResearchFunders])") & _ 
     (" VALUES (@Title, @Initials, @FirstName, @LastName, @Organisation, @Department, @Address, @Code, ") & _ 
     ("@Telephone, @WorkTelephone, @Fax, @CellularTelephone, @Email, @ResearchFocus, @CollID, @ResearchFunders); ") & _ 
     ("INSERT INTO [CANRADcollreg] ([CollID], [FlightDateArrive], [FlightNameArrive], [FlightTimeArrive], [FlightDateDepart], [FlightNameDepart], [FlightTimeDepart], [AttendingLaunch], [Accomodation], [DietaryRequirements], [SpecificDietaryRequirement]) ") & _ 
     ("VALUES (@CollID, @FlightDateArrive, @FlightNameArrive, @FlightTimeArrive, @FlightDateDepart, @FlightNameDepart, @FlightTimeDepart, @AttendingLaunch, @Accomodation, @DietaryRequirements, @SpecificDietaryRequirement)") 
+0

Merci beaucoup PatMortech, la requête fonctionne bien. Le problème que j'ai maintenant est que le ContactsID dans CANRADCollreg doit correspondre à la colonne d'identification dans la table de CANRADcontacts. Ainsi, lorsqu'un utilisateur insère un nouvel enregistrement, il peut avoir un ID commun et ContactsID – Phil

+1

L'ID de la table CANRADcontacts est-il une colonne d'identité? Si c'est le cas, vous pouvez essayer d'utiliser SCOPE_IDENTITY() dans la deuxième instruction INSERT dans laquelle vous souhaitez utiliser la valeur créée pour votre ID d'enregistrement de contact. – patmortech

0

Oui vous devez faire deux commandes SQL ... un pour chaque table, et ajouter des paramètres à la fois des commandes SQL (les deux états d'insertion).

Le problème que j'ai maintenant que le ContactsID en CANRADCollreg doit correspondre à la colonne id dans CANRADcontacts tableau

Pourquoi at-il de faire correspondre le champ de clé primaire? Pourquoi le ContactsID ne peut-il pas être une clé étrangère dans la table CANRAD? Pour ce que vous décrivez, cela semble être la meilleure approche.

Si cela ne fonctionne pas, alors donnez-nous plus de détails sur cette base de données et peut-être que nous pouvons trouver une meilleure solution.