Bonjour,

je dois faire une facture avec les lignes associées (détail facture).

par le clic sur un premier bouton, on obtient le détail facture, que je mets dans des row typés puis j ajoute ces rows au dataset

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
detailRow.code_prestation = codepresta;
                        detailRow.lib_prestation = _libellePrestation;
                        detailRow.montant_ht = Convert.ToDecimal(tarifimport.redevance_import(Convert.ToDouble(ultraGrid1.ActiveRow.Cells["Poids colis"].Value), false, false, false));
                        detailRow.montant_tva = 0;
                        detailRow.taux_tva = 0;
                        detailRow.montant_ttc = detailRow.montant_ht;
                        detailRow.qte_facturee = 1;
                        detailRow.poids_facture = Convert.ToDouble(ultraGrid1.ActiveRow.Cells["Poids colis"].Value);
                        detailRow.valeur_declaree = Convert.ToDouble(ultraGrid1.ActiveRow.Cells["V. déclarée"].Value); ;
                        //pour l instant pas de num facture car c pa encore validé
                        detailRow.id_facture = 0;
 
           dataSet_enlevement.detail_facture.Adddetail_factureRow(detailRow);

Ensuite à la validation de la page, je veux changer l id facture précédemment mis a 0 pour le nouvel id facture obtenu. Mais lorsque j apelle l update sur le dataset j ai une sqlexception pour violation de contraintes sur id_facture. Je n'arrive pas à savoir quelle instruction sql a généré cette exception même avec le profiler de SQL server 2005. Est il possible de mélanger code sql et commandes c# pour la manipulation des bases de données ? Comment puis je récuperer l instruction sql en cause dans l'erreur ?

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
 
private void btn_valider_Click(object sender, EventArgs e)
        {
string strRequete = "insert into facture(id_client,nom_du_client,no_document,mode_facture,montant_ht,montant_ttc,montant_tva,id_situ_facture) values(" + cbx_codeclient.SelectedValue + ",'" + nomcli + "',0,'" + modefact + "','" + mtht + "','" + mtttc + "','" + mttva + "',1); ";
                //Execution de la requête  
                myCommand.CommandText = strRequete;
 
                affectedRows = myCommand.ExecuteNonQuery();
 
                string strRequete2 = "select ident_current('facture')";
 
                myCommand.CommandText = strRequete2;
                affectedRows = Convert.ToInt32(myCommand.ExecuteScalar());
 
 
                //Donner l'id facture aux lignes detail facture
                for (int i = 0; i < ultraGrid2.Rows.Count; i++)
                {
                    ultraGrid2.Rows[i].Cells["id_facture"].Value = affectedRows;
 
                }
                detailfactureBindingSource.EndEdit();
                detail_factureTableAdapter.Update(dataSet_enlevement.detail_facture.Select(null, null, DataViewRowState.Added));
}


L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY 'FK_detail_facture_facture'. Le conflit s'est produit dans la base de données 'madtfret', table 'dbo.facture', column 'id_facture'.
L'instruction a été arrêtée.