bonjour
j'ai une erreur dans mon programme c# en mode deconnecté
mais je n'ai trouvé aucune solution
voila le code :
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System.Data;
using System.IO;
using System;
using System.Data.OleDb;
 
namespace ExempleAdoNetCSharp
{
    /// Description résumée de OleDbDataSet.
 
    public class OleDbDataSet
    {
        public static void Main()
        {
            string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Khalil\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
            string strRequete = "SELECT '' as [id_compte], '' as [titulaire],'' as [solde] from Compte UNION SELECT [id_compte],[titulaire], [solde] FROM [Compte]";
 
                OleDbConnection oConnection = new OleDbConnection(strConnexion);
                oConnection.Open();
 
                // Chargement de la liste des catégories dans oDataSet
                OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter(strRequete, oConnection);
 
                OleDbCommandBuilder dbco = new OleDbCommandBuilder(oOleDbDataAdapter);
 
                DataSet oDataSet = new DataSet("Compte");
                oOleDbDataAdapter.Fill(oDataSet,"Compte");
 
                // Affichage du contenu de oDataSet avant insertion de données
 
                System.Console.WriteLine(" *** Liste des catégories avant la mise à jour *** ");
                for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
                {
                    System.Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
                }
                Console.WriteLine("\n");
 
                // Remplissage de la commande InsetCommand
                oOleDbDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO Compte(titulaire, solde) Values(@titulaire,@solde)",oConnection);
                oOleDbDataAdapter.InsertCommand.Parameters.Add("@titulaire", OleDbType.Char, 15, "titulaire");
                oOleDbDataAdapter.InsertCommand.Parameters.Add("@solde", OleDbType.Integer, 16, "solde");
 
                DataRow oDataRow;
                byte [] byteArray = { 0x00,0x00};
 
                oDataRow = oDataSet.Tables["Compte"].NewRow();
                oDataRow["titulaire"]= "iiiiiiii";
                oDataRow["solde"]= "120000";
 
                oDataSet.Tables["Compte"].Rows.Add(oDataRow);
 
                oOleDbDataAdapter.UpdateCommand = new OleDbCommand("UPDATE Compte SET titulaire = @titulaire, solde = @solde WHERE id_compte = @id_compte", oConnection);
                oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", OleDbType.Char, 15, "id_compte");
                //OleDbParameter parameter = oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", SqlDbType.Int);
                //parameter.SourceColumn = "id_compte";
                //parameter.SourceVersion = DataRowVersion.Original;
                oOleDbDataAdapter.UpdateCommand.Parameters.Add("@titulaire", OleDbType.Char, 15, "titulaire");
                oOleDbDataAdapter.UpdateCommand.Parameters.Add("@solde", OleDbType.VarChar, 40, "solde");
 
                foreach (DataRow row in oDataSet.Tables["Compte"].Rows)
                {
                    if (row["id_compte"].Equals("64"))
                    {
 
                        row["titulaire"] = "je susi";
                        row["solde"] = "2344";
                        break;
                    }
                }
 
 
                oOleDbDataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
                oOleDbDataAdapter.Update(oDataSet, "Compte"); 
                // Mise à jour de la source de données à partir du DataSet
                DataTable table = oDataSet.Tables["Compte"];
 
                // First process deletes.
                oOleDbDataAdapter.Update(table.Select(null, null, DataViewRowState.Deleted));
 
                // Next process updates.
                oOleDbDataAdapter.Update(table.Select(null, null,
                  DataViewRowState.ModifiedCurrent));
 
                // Finally, process inserts.
                oOleDbDataAdapter.Update(table.Select(null, null, DataViewRowState.Added));
 
                // Rechargement des données de la source mise à jour
                oDataSet.Clear();
                oOleDbDataAdapter.Fill(oDataSet,"Compte");
 
                // Affichage du contenu de oDataSet après insertion d'une ligne de données
                Console.WriteLine(" *** Liste des catégories après la mise à jour *** ");
                for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
                {
                    Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
                }
                Console.ReadLine();
                oConnection.Close();
            }
        // Event procedure for OnRowUpdated
        protected static void OnRowUpdated(
          object sender, OleDbRowUpdatedEventArgs args)
        {
            string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Khalil\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
 
 
            OleDbConnection oConnection = new OleDbConnection(strConnexion);
            oConnection.Open();
            // Include a variable and a command to retrieve the identity value from the Access database.
            int newID = 0;
            OleDbCommand idCMD = new OleDbCommand(
              "SELECT @@IDENTITY", oConnection);
 
            if (args.StatementType == StatementType.Update)
            {
                // Retrieve the identity value and store it in the CategoryID column.
                newID = (int)idCMD.ExecuteScalar();
                args.Row["id_compte"] = newID;
            }
        }
        }
    }
et l'erreur :
Violation de l'accès concurrentiel : UpdateCommand a affecté 0 des enregistrements 1 attendus.
sachant que id_compte est auto increment clé primaire
est ce que vous avez une idée
merci d'avance