2013-05-16 4 views
1

J'ai 2 tables à savoir Profile et Info.Mettre à jour plusieurs tables

Ma table ressemblait à ceci:

PROFIL

| p_Id | FirstName | LastName | 

| 1 | Jack  | Cole  | 
| 2 | Cynthia | Cole  | 
| 3 | Robert | Cole  | 

INFO

| I_Id | childsID | fathersID | mothersID | Country | 

| 1 | 1  | 3   | 2   | USA  | 

je récupérer les valeurs de ces tables en les affichant dans les zones de texte, ma requête de sélection est la suivante:

SELECT p.p_Id, p.FirstName, p.LastName, i.*, 
(SELECT pp.FirstName+' '+pp.LastName FROM Profile pp WHERE pp.p_Id=i.childsID) AS child, 
(SELECT pp.FirstName+' '+pp.LastName FROM Profile pp WHERE pp.p_Id=i.fathersID) AS father, 
(SELECT pp.FirstName+' '+pp.LastName FROM Profile pp WHERE pp.p_Id=i.mothersID) AS mother 
    FROM Info i 
     INNER JOIN Profile p 
      ON p.p_Id=i.childsID 

aucun problème avec certains, je suis en mesure d'afficher les valeurs sur les zones de texte, mais le problème est, je ne peux pas les mettre à jour, je l'ai essayé jusqu'à présent ceci:

using (SqlCommand cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = @"UPDATE Profile SET [email protected], [email protected] WHERE p_Id = @pid; 
          UPDATE Info SET [email protected], [email protected], [email protected], [email protected] WHERE I_Id = @iid;"; 

     cmd.Parameters.Add(new SqlParameter("@fname", txtfname.Text)); 
     cmd.Parameters.Add(new SqlParameter("@lname", txtlname.Text)); 
     cmd.Parameters.Add(new SqlParameter("@child", txtchild.Text)); 
     cmd.Parameters.Add(new SqlParameter("@father", txtfather.Text)); 
     cmd.Parameters.Add(new SqlParameter("@mother", txtmother.Text)); 
     cmd.Parameters.Add(new SqlParameter("@country", txtcountry.Text)); 
     cmd.Parameters.Add(new SqlParameter("@pid", txtpid.Text)); 
     cmd.Parameters.Add(new SqlParameter("@iid", txtiid.Text)); 
     cmd.ExecuteNonQuery(); 
     Response.Write("alert('DATA UPDATED')"); 
    } 

J'utilise C# et Asp. net Merci d'avance :) God Bless

+0

Je ne suis pas sûr que ce soit une bonne idée de passer un lot d'instructions de mise à jour SQL dans le 'CommandText' d'un seul objet' SqlCommand' et les paramètres d'addition qui seront utilisés par toutes les mises à jour du lot. –

+1

Cette question est affichée à plusieurs reprises, voir aussi http://stackoverflow.com/questions/16586456/update-query-with-multiple-tables et http://stackoverflow.com/questions/16588835/select-to-update – criticalfix

Répondre

0

Vérifiez le MSDN: SqlParameter Constructor (String, Object)

Lorsque vous spécifiez un objet dans le paramètre de valeur, le SqlDbType est déduit du type Microsoft .NET Framework de l'objet.

Ainsi, lorsque vous passant des paramètres de type int vous devez convertir la valeur de texte en nombre entier:

cmd.Parameters.Add(new SqlParameter("@pid", int.Parse(txtpid.Text))); 

ou mieux:

int tempIntValue; 
cmd.Parameters.Add(new SqlParameter("@pid", int.TryParse(txtpid.Text, out tempIntValue)? 
    (object)intTempValue: (object)DbNull.Value)); 
Questions connexes