Bonjour,

je cherche a inserer en base plusieurs lignes dans le schema suivant :
j'ai 2 tables
la 1ere est une table de demande de modification (clé primaire)
la 2e pour la liste des champs à modifier (clé primaire + clé etrangere de la 1ere table)

Actuellement j'arrive a inserer ma ligne dans ma 1ere table, mais le probleme est dans l'insertion des lignes dans la 2e table; je pense que l'erreur est du au fait que la clé étrangère ne soit pas "physiquement" sur la table!

pourtant j'utilise une transaction!

voici le code d'insertion de la 1ere table

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
 
protected void btnModifierAgent_Click(object sender, EventArgs e)
    {
        bool error = false;
        String connectionString = ConfigurationManager.ConnectionStrings["csIntranetSpecifique"].ConnectionString;
 
        SqlTransaction transaction = null;
        SqlConnection connection = new SqlConnection(connectionString);
 
        try
        {
            //Requete insertion
            string commandInsert = "INSERT INTO [Intranet_Specifique].[dbo].[ANNUAIRE_DEMANDE]"
                + "([ADE_Date],[ADE_Utilisateur]) VALUES (@ADE_Date, @ADE_Utilisateur); SELECT @@IDENTITY";
 
            connection.Open();
            transaction = connection.BeginTransaction();
            SqlCommand sqlCommand = new SqlCommand(commandInsert, connection);
 
            //Création et décalartion des paramètres
            sqlCommand.Parameters.Add(new SqlParameter("@ADE_Date", SqlDbType.DateTime));
            sqlCommand.Parameters.Add(new SqlParameter("@ADE_Utilisateur", SqlDbType.NVarChar, 50));
 
            //Attribution des valeurs aux paramètres
            sqlCommand.Parameters["@ADE_Date"].Value = DateTime.Now;
            sqlCommand.Parameters["@ADE_Utilisateur"].Value = this.Login;
 
            sqlCommand.Transaction = transaction;
            int id = Convert.ToInt16(sqlCommand.ExecuteScalar());
 
            //Enregistrement des demandes de modifications
            //pour le nom
            if (this.ViewState[this.txtNom.ID].ToString() != this.txtNom.Text)
            {
                this.insertAnnuaireLigne(connection, transaction, id, "", this.ViewState[this.txtNom.ID], this.txtNom.Text);
            }
        }
        catch(Exception ex)
        {
            error = true;
        }
        finally
        {
            // Validation de la transaction
            if (transaction != null)
            {
                if (error)
                {
                    transaction.Rollback();
                }
                else
                {
                    try
                    {
                        transaction.Commit();
                    }
                    catch
                    {
                        transaction.Rollback();
                    }
                }
            }
            // Fermeture de la connexion
            if (connection.State == ConnectionState.Open)
            {
                connection.Close();
            }
        }
    }
Voici le code d'insertion des lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 
  private void insertAnnuaireLigne(SqlConnection pConnection, SqlTransaction pTransaction
        , int pIdAnnuaire, string pType, object pAncienneValeur, object pNouvelleValeur)
    {
        string CommantInsertLigne = "INSERT INTO [Intranet_Specifique].[dbo].[ANNUAIRE_DEMANDE_LISTE] "
            + "([ADL_IdAnnuaireDemande],[ADL_Type],[ADL_Etat]"
            //+ ",[ADL_Utilisateur],[ADL_AncienneImage],[ADL_NouvelleImage]) VALUES (@ADL_IdAnnuaireDemande"
            + ",[ADL_Utilisateur]) VALUES (@ADL_IdAnnuaireDemande"
            //+ ",@ADL_Type,@ADL_Etat,@ADL_AncienneValeur,@ADL_NouvelleValeur,@ADL_Utilisateur,@ADL_AncienneImage,@ADL_NouvelleImage)";
            + ",@ADL_Type,@ADL_Etat,@ADL_Utilisateur)";
        SqlCommand sqlCommandLigne = new SqlCommand(CommantInsertLigne, pConnection);
 
        //Création et décalartion des paramètres
        sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_IdAnnuaireDemande", SqlDbType.Int));
        sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_Type", SqlDbType.NVarChar, 50));
        sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_Etat", SqlDbType.NVarChar, 50));
        sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_Utilisateur", SqlDbType.NVarChar, 50));
        //sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_AncienneValeur", SqlDbType.NVarChar, 50));
        //sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_NouvelleValeur", SqlDbType.NVarChar, 50));
        //sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_AncienneImage", SqlDbType.Image));
        //sqlCommandLigne.Parameters.Add(new SqlParameter("@ADL_NouvelleImage", SqlDbType.Image));
 
        //Attribution des valeurs aux paramètres
        sqlCommandLigne.Parameters["@ADL_IdAnnuaireDemande"].Value = pIdAnnuaire;
        sqlCommandLigne.Parameters["@ADL_Type"].Value = "En attente";
        sqlCommandLigne.Parameters["@ADL_Etat"].Value = pType;
        sqlCommandLigne.Parameters["@ADL_Utilisateur"].Value = this.Login;
        //if (pType.Equals("Image"))
        //{
        //    sqlCommandLigne.Parameters["@ADL_AncienneImage"].Value = (byte[]) pAncienneValeur;
        //    sqlCommandLigne.Parameters["@ADL_NouvelleImage"].Value = (byte[]) pNouvelleValeur;
        //    sqlCommandLigne.Parameters["@ADL_AncienneValeur"].Value = null;
        //    sqlCommandLigne.Parameters["@ADL_NouvelleValeur"].Value = null;
        //}
        //else
        //{
        //    sqlCommandLigne.Parameters["@ADL_AncienneImage"].Value = null;
        //    sqlCommandLigne.Parameters["@ADL_NouvelleImage"].Value = null;
        //    sqlCommandLigne.Parameters["@ADL_AncienneValeur"].Value = Convert.ToString(pAncienneValeur);
        //    sqlCommandLigne.Parameters["@ADL_NouvelleValeur"].Value = Convert.ToString(pNouvelleValeur);
        //}
        sqlCommandLigne.Transaction = pTransaction;
        sqlCommandLigne.ExecuteNonQuery();
    }
PS ne fait pas attention au code en commentaire, j'effectuais des tests!

merki d'avance.