Ik ben bezig met een projectje waar bepaalde rijen eerst uit de database gehaald worden, waarna ze geedit kunnen worden.
De database is gewoon een access bestand
Het probleem is dat in de updatePizza een DBConcurrencyException geworpen wordt, terwijl er niemand anders met de database verbonden is (proggie draait slechts 1 maal, access is gesloten, server explorer is disconnected)
Ik heb al geprobeerd op de commandbuilder de updatequery's te laten generen, maar die doet het evenmin.
Ik heb ook de query al direct in access uitgevoerd, en daar werkt het perfect.
Volgens mij is het probleem dat ofwel de rij gelocked wordt, wat me onwaarschijnlijk lijkt,
ofwel dat de query 0 rijen kan updaten, dit is namelijk de hoofdoorzaak van de Exception, maar dan zou het aan de updatequery moeten liggen, en deze werkt zoals gezegd in access wel.
Er bestaat een Dataset met schema die zorgt voor de strong typing in de dataset
Dit is de klasse die zorgt voor de databasetoegang
De database is gewoon een access bestand
Het probleem is dat in de updatePizza een DBConcurrencyException geworpen wordt, terwijl er niemand anders met de database verbonden is (proggie draait slechts 1 maal, access is gesloten, server explorer is disconnected)
Ik heb al geprobeerd op de commandbuilder de updatequery's te laten generen, maar die doet het evenmin.
Ik heb ook de query al direct in access uitgevoerd, en daar werkt het perfect.
Volgens mij is het probleem dat ofwel de rij gelocked wordt, wat me onwaarschijnlijk lijkt,
ofwel dat de query 0 rijen kan updaten, dit is namelijk de hoofdoorzaak van de Exception, maar dan zou het aan de updatequery moeten liggen, en deze werkt zoals gezegd in access wel.
Er bestaat een Dataset met schema die zorgt voor de strong typing in de dataset
Dit is de klasse die zorgt voor de databasetoegang
C#:
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
| using System; using System.Data; using System.Data.OleDb; using System.Collections; using System.Diagnostics; using PizzaShopClassLibrary; namespace PizzaShopDatabase { /// <summary> /// Summary description for Class1. /// </summary> public class dbPizza { private OleDbConnection dbconn; private OleDbDataAdapter myOleDbDataAdapter; private DatabaseDS myDS; public dbPizza() { try { dbconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../../data.mdb;User Id=admin;Password=;"); dbconn.Open(); } catch (OleDbException e) { //Databaseconnectie is mislukt Debug.Write(e.ToString()); } } public bool isConnected() { return dbconn.State == ConnectionState.Open; } public ArrayList getPizzas() { ArrayList result = new ArrayList(); OleDbCommand mySelectCommand = new OleDbCommand("Select * from T_PIZZA", dbconn); myOleDbDataAdapter = new OleDbDataAdapter(mySelectCommand); myDS = new DatabaseDS(); myOleDbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; OleDbParameter workParam = null; myOleDbDataAdapter.UpdateCommand = new OleDbCommand("Update T_PIZZA Set name = @name, ingredients = @ingredients, price = @price WHERE id = @id" , dbconn); workParam = myOleDbDataAdapter.UpdateCommand.Parameters.Add("@id", OleDbType.Integer); workParam.SourceColumn = "id"; workParam.SourceVersion = DataRowVersion.Original; workParam = myOleDbDataAdapter.UpdateCommand.Parameters.Add("@name", OleDbType.VarChar); workParam.SourceColumn = "name"; workParam.SourceVersion = DataRowVersion.Current; workParam = myOleDbDataAdapter.UpdateCommand.Parameters.Add("@ingredients", OleDbType.VarChar); workParam.SourceColumn = "ingredients"; workParam.SourceVersion = DataRowVersion.Current; workParam = myOleDbDataAdapter.UpdateCommand.Parameters.Add("@price", OleDbType.Double); workParam.SourceColumn = "price"; workParam.SourceVersion = DataRowVersion.Current; try { myOleDbDataAdapter.Fill(myDS, "pizza"); foreach (DatabaseDS.pizzaRow myDataRow in myDS.pizza) { Pizza myPizza = new Pizza(myDataRow.id, myDataRow.name, myDataRow.price, myDataRow.ingredients); result.Add(myPizza); } } catch(Exception e) { Console.Write(e.ToString()); } return result; } public void updatePizza(Pizza pizza) { DatabaseDS.pizzaRow myPizzaRow = (DatabaseDS.pizzaRow)myDS.pizza.Rows.Find(pizza.id); myPizzaRow.BeginEdit(); myPizzaRow.name = pizza.naam; myPizzaRow.ingredients = pizza.ingredienten; myPizzaRow.price = pizza.prijs; myPizzaRow.EndEdit(); myOleDbDataAdapter.Update(myDS, "pizza"); } } } |