Votre question

erreur update mode deconnecté

Tags :
  • update
  • data
  • Programmation
Dernière réponse : dans Programmation
7 Mai 2012 08:35:38

bonjour
j'ai une erreur dans mon programme c# en mode deconnecté
mais je n'ai trouvé aucune solution
voila le code :
  1. using System.Data;
  2. using System.IO;
  3. using System;
  4. using System.Data.OleDb;
  5.  
  6. namespace ExempleAdoNetCSharp
  7. {
  8. /// Description résumée de OleDbDataSet.
  9.  
  10. public class OleDbDataSet
  11. {
  12. public static void Main()
  13. {
  14. string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\admin\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
  15. string strRequete = "SELECT '' as [id_compte], '' as [titulaire],'' as [solde] from Compte UNION SELECT [id_compte],[titulaire], [solde] FROM [Compte]";
  16.  
  17. OleDbConnection oConnection = new OleDbConnection(strConnexion);
  18. oConnection.Open();
  19.  
  20. // Chargement de la liste des catégories dans oDataSet
  21. OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter(strRequete, oConnection);
  22.  
  23. OleDbCommandBuilder dbco = new OleDbCommandBuilder(oOleDbDataAdapter);
  24.  
  25. DataSet oDataSet = new DataSet("Compte");
  26. oOleDbDataAdapter.Fill(oDataSet,"Compte");
  27.  
  28. // Affichage du contenu de oDataSet avant insertion de données
  29.  
  30. System.Console.WriteLine(" *** Liste des catégories avant la mise à jour *** ");
  31. for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
  32. {
  33. System.Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
  34. }
  35. Console.WriteLine("\n");
  36.  
  37. // Remplissage de la commande InsetCommand
  38. oOleDbDataAdapter.InsertCommand = new OleDbCommand("INSERT INTO Compte(titulaire, solde) Values(@titulaire,@solde)",oConnection);
  39. oOleDbDataAdapter.InsertCommand.Parameters.Add("@titulaire", OleDbType.Char, 15, "titulaire");
  40. oOleDbDataAdapter.InsertCommand.Parameters.Add("@solde", OleDbType.Integer, 16, "solde");
  41.  
  42. DataRow oDataRow;
  43. byte [] byteArray = { 0x00,0x00};
  44.  
  45. oDataRow = oDataSet.Tables["Compte"].NewRow();
  46. oDataRow["titulaire"]= "iiiiiiii";
  47. oDataRow["solde"]= "120000";
  48.  
  49. oDataSet.Tables["Compte"].Rows.Add(oDataRow);
  50.  
  51. oOleDbDataAdapter.UpdateCommand = new OleDbCommand("UPDATE Compte SET titulaire = @titulaire, solde = @solde WHERE id_compte = @id_compte", oConnection);
  52. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", OleDbType.Char, 15, "id_compte");
  53. //OleDbParameter parameter = oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", SqlDbType.Int);
  54. //parameter.SourceColumn = "id_compte";
  55. //parameter.SourceVersion = DataRowVersion.Original;
  56. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@titulaire", OleDbType.Char, 15, "titulaire");
  57. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@solde", OleDbType.VarChar, 40, "solde");
  58.  
  59. foreach (DataRow row in oDataSet.Tables["Compte"].Rows)
  60. {
  61. if (row["id_compte"].Equals("64"))
  62. {
  63.  
  64. row["titulaire"] = "je susi";
  65. row["solde"] = "2344";
  66. break;
  67. }
  68. }
  69.  
  70.  
  71. oOleDbDataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
  72. oOleDbDataAdapter.Update(oDataSet, "Compte");
  73. // Mise à jour de la source de données à partir du DataSet
  74. DataTable table = oDataSet.Tables["Compte"];
  75.  
  76. // First process deletes.
  77. oOleDbDataAdapter.Update(table.Select(null, null, DataViewRowState.Deleted));
  78.  
  79. // Next process updates.
  80. oOleDbDataAdapter.Update(table.Select(null, null,
  81. DataViewRowState.ModifiedCurrent));
  82.  
  83. // Finally, process inserts.
  84. oOleDbDataAdapter.Update(table.Select(null, null, DataViewRowState.Added));
  85.  
  86. // Rechargement des données de la source mise à jour
  87. oDataSet.Clear();
  88. oOleDbDataAdapter.Fill(oDataSet,"Compte");
  89.  
  90. // Affichage du contenu de oDataSet après insertion d'une ligne de données
  91. Console.WriteLine(" *** Liste des catégories après la mise à jour *** ");
  92. for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
  93. {
  94. Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
  95. }
  96. Console.ReadLine();
  97. oConnection.Close();
  98. }
  99. // Event procedure for OnRowUpdated
  100. protected static void OnRowUpdated(
  101. object sender, OleDbRowUpdatedEventArgs args)
  102. {
  103. string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\admin\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
  104.  
  105.  
  106. OleDbConnection oConnection = new OleDbConnection(strConnexion);
  107. oConnection.Open();
  108. // Include a variable and a command to retrieve the identity value from the Access database.
  109. int newID = 0;
  110. OleDbCommand idCMD = new OleDbCommand(
  111. "SELECT @@IDENTITY", oConnection);
  112.  
  113. if (args.StatementType == StatementType.Update)
  114. {
  115. // Retrieve the identity value and store it in the CategoryID column.
  116. newID = (int)idCMD.ExecuteScalar();
  117. args.Row["id_compte"] = newID;
  118. }
  119. }
  120. }
  121. }


et l'erreur :
Violation de l'accès concurrentiel : UpdateCommand a affecté 0 des enregistrements 1 attendus.

sanchant qie id_compte est cle_primaire auto increment

en d'autres termes
j'ai une base de donnees access avec une table qui contient un champs clé primaire et auto-increment
et je veux dans mon programme c# executer une modification d'un enregistrement <gras><italique>en mode déconnecté</italique></gras>


est ce que vous avez une idée
merci d'avance

Autres pages sur : erreur update mode deconnecte

a c 232 L Programmation
7 Mai 2012 10:17:56

Tu veux pas mettre des sauts de ligne ?
C'est illisible là
m
0
l
a c 232 L Programmation
7 Mai 2012 14:41:12

Pourquoi tu appelles plusieurs fois la méthode Update ?
En l'appellant une fois en lui passant ton DataSet et le nom de la table, ça prend en charge tous les INSERT, UPDATE et DELETE.
m
0
l
Contenus similaires
8 Mai 2012 06:41:12

j'ai enlevé les autres mais le meme probleme : la meme erreur ;

  1. using System.Data;
  2. using System.IO;
  3. using System;
  4. using System.Data.OleDb;
  5.  
  6. namespace ExempleAdoNetCSharp
  7. {
  8. /// Description résumée de OleDbDataSet.
  9.  
  10. public class OleDbDataSet
  11. {
  12. public static void Main()
  13. {
  14. string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\admin\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
  15. string strRequete = "SELECT id_compte, titulaire, solde from Compte";
  16.  
  17. OleDbConnection oConnection = new OleDbConnection(strConnexion);
  18. oConnection.Open();
  19.  
  20. // Chargement de la liste des catégories dans oDataSet
  21. OleDbDataAdapter oOleDbDataAdapter = new OleDbDataAdapter(strRequete, oConnection);
  22.  
  23. DataSet oDataSet = new DataSet("Compte");
  24. oOleDbDataAdapter.Fill(oDataSet,"Compte");
  25.  
  26. // Affichage du contenu de oDataSet avant insertion de données
  27.  
  28. System.Console.WriteLine(" *** Liste des comptes avant la mise à jour *** ");
  29. for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
  30. {
  31. System.Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
  32. }
  33. Console.WriteLine("\n");
  34.  
  35. oOleDbDataAdapter.UpdateCommand = new OleDbCommand("UPDATE Compte SET titulaire = @titulaire, solde = @solde WHERE id_compte = @id_compte", oConnection);
  36. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", OleDbType.Char, 15, "id_compte");
  37. //OleDbParameter parameter = oOleDbDataAdapter.UpdateCommand.Parameters.Add("@id_compte", SqlDbType.Int);
  38. //parameter.SourceColumn = "id_compte";
  39. //parameter.SourceVersion = DataRowVersion.Original;
  40. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@titulaire", OleDbType.Char, 15, "titulaire");
  41. oOleDbDataAdapter.UpdateCommand.Parameters.Add("@solde", OleDbType.VarChar, 40, "solde");
  42.  
  43. foreach (DataRow row in oDataSet.Tables["Compte"].Rows)
  44. {
  45. if (row["id_compte"].Equals("64"))
  46. {
  47. Console.WriteLine("" + row["id_compte"]);
  48. row["id_compte"] = "64";
  49. row["titulaire"] = "je susi";
  50. row["solde"] = "2344";
  51. break;
  52. }
  53. }
  54.  
  55.  
  56. oOleDbDataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);
  57.  
  58. oOleDbDataAdapter.Update(oDataSet, "Compte");
  59.  
  60. oOleDbDataAdapter.Fill(oDataSet,"Compte");
  61.  
  62. // Affichage du contenu de oDataSet après insertion d'une ligne de données
  63. Console.WriteLine(" *** Liste des comptes après la mise à jour *** ");
  64. for (int i=0 ; i < oDataSet.Tables["Compte"].Rows.Count ; i++)
  65. {
  66. Console.WriteLine("\t{0}\t{1}",oDataSet.Tables["Compte"].Rows[i][0].ToString(),oDataSet.Tables["Compte"].Rows[i][1].ToString());
  67. }
  68. Console.ReadLine();
  69. oConnection.Close();
  70. }
  71. // Event procedure for OnRowUpdated
  72. protected static void OnRowUpdated(
  73. object sender, OleDbRowUpdatedEventArgs args)
  74. {
  75. string strConnexion = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\admin\Documents\Visual Studio 2010\WebSites\TpCompteModeDeconnecté\App_Data\baseCompte.accdb";
  76.  
  77.  
  78. OleDbConnection oConnection = new OleDbConnection(strConnexion);
  79. oConnection.Open();
  80. // Include a variable and a command to retrieve the identity value from the Access database.
  81. int newID = 0;
  82. OleDbCommand idCMD = new OleDbCommand(
  83. "SELECT @@IDENTITY", oConnection);
  84.  
  85. if (args.StatementType == StatementType.Update)
  86. {
  87. // Retrieve the identity value and store it in the CategoryID column.
  88. newID = (int)idCMD.ExecuteScalar();
  89. args.Row["id_compte"] = newID;
  90. }
  91. }
  92. }
  93. }



je te rapple que j'ai l' id_compte autonumero dans access et je doute que cette attribut qui me fait le probleme
et mon but et de lui donner l'id puis il modifie la base

merci
m
0
l
8 Mai 2012 06:52:18

pouvez-vous m'aider par quelques lignes de codes pour que je puisse mettre à jour ma base de données si je fournir la valeur du champ auto-increment de toute inscription

car j'ai fait une tentative de ce genre mais une autre erreur :

  1. DataRow foundRow;
  2.  
  3. foundRow = dtCustomers.Rows.Find(i);
  4.  
  5. if (foundRow == null)
  6. Console.WriteLine(" Row Not Found");
  7. else
  8. { // Mettre la rangée trouvée en mode édition
  9. foundRow.BeginEdit();
  10. // mettre à jour la limite de crédit
  11. foundRow[2] = 50000.00;
  12. dtCustomers.AcceptChanges();
  13. } 


et dans ce cas lorsque je configure mon champ auto-increment comme clé primaire il me dit dans l'erreur quil contient des valeurs nulls
et quand je verifie dans la base je ne trouve aucune valeur null


merci
m
0
l
a c 232 L Programmation
8 Mai 2012 19:49:16

S'il te dit que l'erreur est que ça contient des valeur null, c'est que ce que tu essaies d'insérer a des valeurs null, et ça ne peut pas s'insérer du coup. Donc forcément que tu ne les retrouves pas dans ta table.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS