Ik heb een programma dat de ledenadminstratie bijhoudt in een access database. Ik heb de volgende code:
<code language=C#>
query = "SELECT * FROM leden";
dAdapterLeden = new OleDbDataAdapter(query, connString);
OleDbCommandBuilder cBuilderLeden = new OleDbCommandBuilder(dAdapterLeden);
dAdapterLeden.DeleteCommand = cBuilderLeden.GetDeleteCommand();
dAdapterLeden.InsertCommand = cBuilderLeden.GetInsertCommand();
dAdapterLeden.UpdateCommand = cBuilderLeden.GetUpdateCommand();
dTableLeden = new DataTable();
dAdapterLeden.Fill(dTableLeden);
dataGridLeden.DataSource = dTableLeden;
</code>
Als ik in de commandtext van het updatecommand kijk dan zie ik het volgende:
UPDATE leden SET NBB_nummer = ?, Voornaam = ?, Tussen = ?, Achternaam = ?, Adres = ?, Postcode = ?, Plaats = ?, Telefoonnummer = ?, Mobiel = ?, Geb_datum = ?, Lid_sinds = ?, Team = ?, Bankspeler = ?, E-mailadres = ?, Scheidsrechter = ?, Zaalwacht = ?, Tafel = ?, Scorer = ?, Vervoer = ?, Bondscheidsrechter = ?, Taken = ?, Taken_zaalwacht = ?, Zoeknaam = ? WHERE (((? = 1 AND NBB_nummer IS NULL) OR (NBB_nummer = ?)) AND ((? = 1 AND Voornaam IS NULL) OR (Voornaam = ?)) AND ((? = 1 AND Tussen IS NULL) OR (Tussen = ?)) AND ((? = 1 AND Achternaam IS NULL) OR (Achternaam = ?)) AND ((? = 1 AND Adres IS NULL) OR (Adres = ?)) AND ((? = 1 AND Postcode IS NULL) OR (Postcode = ?)) AND ((? = 1 AND Plaats IS NULL) OR (Plaats = ?)) AND ((? = 1 AND Telefoonnummer IS NULL) OR (Telefoonnummer = ?)) AND ((? = 1 AND Mobiel IS NULL) OR (Mobiel = ?)) AND ((? = 1 AND Geb_datum IS NULL) OR (Geb_datum = ?)) AND ((? = 1 AND Lid_sinds IS NULL) OR (Lid_sinds = ?)) AND ((? = 1 AND Team IS NULL) OR (Team = ?)) AND ((? = 1 AND Bankspeler IS NULL) OR (Bankspeler = ?)) AND ((? = 1 AND E-mailadres IS NULL) OR (E-mailadres = ?)) AND ((? = 1 AND Scheidsrechter IS NULL) OR (Scheidsrechter = ?)) AND ((? = 1 AND Zaalwacht IS NULL) OR (Zaalwacht = ?)) AND ((? = 1 AND Tafel IS NULL) OR (Tafel = ?)) AND ((? = 1 AND Scorer IS NULL) OR (Scorer = ?)) AND ((? = 1 AND Vervoer IS NULL) OR (Vervoer = ?)) AND ((? = 1 AND Bondscheidsrechter IS NULL) OR (Bondscheidsrechter = ?)) AND ((? = 1 AND Taken IS NULL) OR (Taken = ?)) AND ((? = 1 AND Taken_zaalwacht IS NULL) OR (Taken_zaalwacht = ?)) AND ((? = 1 AND Zoeknaam IS NULL) OR (Zoeknaam = ?)))
Als ik een lid wijzig met dAdapterLeden.Update(dTableLeden). Hierbij krijg ik foutmelding "syntax error in UPDATE statement".
Als ik het update statement zelf maak krijg ik de foutmleding "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.".
dAdapterLeden.UpdateCommand = new OleDbCommand("UPDATE leden SET [NBB_nummer] = @NBB_nummer, [Voornaam] = @Voornaam, [Tussen] = @Tussen, " +
"[Achternaam] = @Achternaam, [Adres] = @Adres, [Postcode] = @Postcode, [Plaats] = @Plaats, [Telefoonnummer] = @Telefoonnummer, " +
"[Mobiel] = @Mobiel, [Geb_datum] = @Gebdatum, [Lid_sinds] = @Lidsinds, [Team] = @Team, [Bankspeler] = @Bankspeler, " +
"[E-mailadres] = @Emailadres, [Scheidsrechter] = @Scheidsrechter, [Zaalwacht] = @Zaalwacht, [Tafel] = @Tafel, [Scorer] = @Scorer, " +
"[Vervoer] = @Vervoer, [Bondscheidsrechter] = @Bondscheidsrechter, [Taken] = @Taken, [Taken_zaalwacht] = @Takenzaalwacht " +
"WHERE [Zoeknaam] = @Zoeknaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@NBB_nummer", OleDbType.Integer, 5, "NBB_nummer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Voornaam", OleDbType.Char, 50, "Voornaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@Tussen", OleDbType.Char, 15, "Tussen");
dAdapterLeden.UpdateCommand.Parameters.Add("@Achternaam", OleDbType.Char, 50, "Achternaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@Adres", OleDbType.Char, 255, "Adres");
dAdapterLeden.UpdateCommand.Parameters.Add("@Postcode", OleDbType.Char, 20, "Postcode");
dAdapterLeden.UpdateCommand.Parameters.Add("@Plaats", OleDbType.Char, 50, "Plaats");
dAdapterLeden.UpdateCommand.Parameters.Add("@Telefoonnummer", OleDbType.Char, 15, "Telefoonnummer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Mobiel", OleDbType.Char, 15, "Mobiel");
dAdapterLeden.UpdateCommand.Parameters.Add("@Gebdatum", OleDbType.DBDate, 22, "Geb_datum");
dAdapterLeden.UpdateCommand.Parameters.Add("@Lidsinds", OleDbType.DBDate, 22, "Lid_sinds");
dAdapterLeden.UpdateCommand.Parameters.Add("@Team", OleDbType.Char, 4, "Team");
dAdapterLeden.UpdateCommand.Parameters.Add("@Bankspeler", OleDbType.Char, 4, "Bankspeler");
dAdapterLeden.UpdateCommand.Parameters.Add("@Emailadres", OleDbType.Char, 60, "E-mailadres");
dAdapterLeden.UpdateCommand.Parameters.Add("@Scheidsrechter", OleDbType.Boolean, 1, "Scheidsrechter");
dAdapterLeden.UpdateCommand.Parameters.Add("@Zaalwacht", OleDbType.Boolean, 1, "Zaalwacht");
dAdapterLeden.UpdateCommand.Parameters.Add("@Tafel", OleDbType.Boolean, 1, "Tafel");
dAdapterLeden.UpdateCommand.Parameters.Add("@Scorer", OleDbType.Boolean, 1, "Scorer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Vervoer", OleDbType.Boolean, 1, "Vervoer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Bondscheidsrechter", OleDbType.Boolean, 1, "Bondscheidsrechter");
dAdapterLeden.UpdateCommand.Parameters.Add("@Taken", OleDbType.Integer, 5, "Taken");
dAdapterLeden.UpdateCommand.Parameters.Add("@Takenzaalwacht", OleDbType.Integer, 5, "Taken_zaalwacht");
dAdapterLeden.UpdateCommand.Parameters.Add("@Zoeknaam", OleDbType.Char, 115, "Zoeknaam");
Als ik zelf voor de delete het command samenstel, gaat het onderstaande goed. Als ik "[Adres] is null" weglaat dan gaat het mis als ik een lid verwijder als het adres leeg is. Ik krijg dan weer de foutmelding "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.".
dAdapterLeden.DeleteCommand = new OleDbCommand("DELETE FROM leden WHERE [Zoeknaam] = @Zoeknaam AND ([Adres] = @Adres or [Adres] is null)");
dAdapterLeden.DeleteCommand.Parameters.Add("@Zoeknaam", OleDbType.Char, 115, "Zoeknaam");
dAdapterLeden.DeleteCommand.Parameters.Add("@Adres", OleDbType.Char, 255, "Adres");
Iemand een idee wat hier het probleem is?
Iemand een idee wat de beste manier is om update-, insert- en deletecommands te maken?
Groet, Erik
<code language=C#>
query = "SELECT * FROM leden";
dAdapterLeden = new OleDbDataAdapter(query, connString);
OleDbCommandBuilder cBuilderLeden = new OleDbCommandBuilder(dAdapterLeden);
dAdapterLeden.DeleteCommand = cBuilderLeden.GetDeleteCommand();
dAdapterLeden.InsertCommand = cBuilderLeden.GetInsertCommand();
dAdapterLeden.UpdateCommand = cBuilderLeden.GetUpdateCommand();
dTableLeden = new DataTable();
dAdapterLeden.Fill(dTableLeden);
dataGridLeden.DataSource = dTableLeden;
</code>
Als ik in de commandtext van het updatecommand kijk dan zie ik het volgende:
UPDATE leden SET NBB_nummer = ?, Voornaam = ?, Tussen = ?, Achternaam = ?, Adres = ?, Postcode = ?, Plaats = ?, Telefoonnummer = ?, Mobiel = ?, Geb_datum = ?, Lid_sinds = ?, Team = ?, Bankspeler = ?, E-mailadres = ?, Scheidsrechter = ?, Zaalwacht = ?, Tafel = ?, Scorer = ?, Vervoer = ?, Bondscheidsrechter = ?, Taken = ?, Taken_zaalwacht = ?, Zoeknaam = ? WHERE (((? = 1 AND NBB_nummer IS NULL) OR (NBB_nummer = ?)) AND ((? = 1 AND Voornaam IS NULL) OR (Voornaam = ?)) AND ((? = 1 AND Tussen IS NULL) OR (Tussen = ?)) AND ((? = 1 AND Achternaam IS NULL) OR (Achternaam = ?)) AND ((? = 1 AND Adres IS NULL) OR (Adres = ?)) AND ((? = 1 AND Postcode IS NULL) OR (Postcode = ?)) AND ((? = 1 AND Plaats IS NULL) OR (Plaats = ?)) AND ((? = 1 AND Telefoonnummer IS NULL) OR (Telefoonnummer = ?)) AND ((? = 1 AND Mobiel IS NULL) OR (Mobiel = ?)) AND ((? = 1 AND Geb_datum IS NULL) OR (Geb_datum = ?)) AND ((? = 1 AND Lid_sinds IS NULL) OR (Lid_sinds = ?)) AND ((? = 1 AND Team IS NULL) OR (Team = ?)) AND ((? = 1 AND Bankspeler IS NULL) OR (Bankspeler = ?)) AND ((? = 1 AND E-mailadres IS NULL) OR (E-mailadres = ?)) AND ((? = 1 AND Scheidsrechter IS NULL) OR (Scheidsrechter = ?)) AND ((? = 1 AND Zaalwacht IS NULL) OR (Zaalwacht = ?)) AND ((? = 1 AND Tafel IS NULL) OR (Tafel = ?)) AND ((? = 1 AND Scorer IS NULL) OR (Scorer = ?)) AND ((? = 1 AND Vervoer IS NULL) OR (Vervoer = ?)) AND ((? = 1 AND Bondscheidsrechter IS NULL) OR (Bondscheidsrechter = ?)) AND ((? = 1 AND Taken IS NULL) OR (Taken = ?)) AND ((? = 1 AND Taken_zaalwacht IS NULL) OR (Taken_zaalwacht = ?)) AND ((? = 1 AND Zoeknaam IS NULL) OR (Zoeknaam = ?)))
Als ik een lid wijzig met dAdapterLeden.Update(dTableLeden). Hierbij krijg ik foutmelding "syntax error in UPDATE statement".
Als ik het update statement zelf maak krijg ik de foutmleding "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.".
dAdapterLeden.UpdateCommand = new OleDbCommand("UPDATE leden SET [NBB_nummer] = @NBB_nummer, [Voornaam] = @Voornaam, [Tussen] = @Tussen, " +
"[Achternaam] = @Achternaam, [Adres] = @Adres, [Postcode] = @Postcode, [Plaats] = @Plaats, [Telefoonnummer] = @Telefoonnummer, " +
"[Mobiel] = @Mobiel, [Geb_datum] = @Gebdatum, [Lid_sinds] = @Lidsinds, [Team] = @Team, [Bankspeler] = @Bankspeler, " +
"[E-mailadres] = @Emailadres, [Scheidsrechter] = @Scheidsrechter, [Zaalwacht] = @Zaalwacht, [Tafel] = @Tafel, [Scorer] = @Scorer, " +
"[Vervoer] = @Vervoer, [Bondscheidsrechter] = @Bondscheidsrechter, [Taken] = @Taken, [Taken_zaalwacht] = @Takenzaalwacht " +
"WHERE [Zoeknaam] = @Zoeknaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@NBB_nummer", OleDbType.Integer, 5, "NBB_nummer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Voornaam", OleDbType.Char, 50, "Voornaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@Tussen", OleDbType.Char, 15, "Tussen");
dAdapterLeden.UpdateCommand.Parameters.Add("@Achternaam", OleDbType.Char, 50, "Achternaam");
dAdapterLeden.UpdateCommand.Parameters.Add("@Adres", OleDbType.Char, 255, "Adres");
dAdapterLeden.UpdateCommand.Parameters.Add("@Postcode", OleDbType.Char, 20, "Postcode");
dAdapterLeden.UpdateCommand.Parameters.Add("@Plaats", OleDbType.Char, 50, "Plaats");
dAdapterLeden.UpdateCommand.Parameters.Add("@Telefoonnummer", OleDbType.Char, 15, "Telefoonnummer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Mobiel", OleDbType.Char, 15, "Mobiel");
dAdapterLeden.UpdateCommand.Parameters.Add("@Gebdatum", OleDbType.DBDate, 22, "Geb_datum");
dAdapterLeden.UpdateCommand.Parameters.Add("@Lidsinds", OleDbType.DBDate, 22, "Lid_sinds");
dAdapterLeden.UpdateCommand.Parameters.Add("@Team", OleDbType.Char, 4, "Team");
dAdapterLeden.UpdateCommand.Parameters.Add("@Bankspeler", OleDbType.Char, 4, "Bankspeler");
dAdapterLeden.UpdateCommand.Parameters.Add("@Emailadres", OleDbType.Char, 60, "E-mailadres");
dAdapterLeden.UpdateCommand.Parameters.Add("@Scheidsrechter", OleDbType.Boolean, 1, "Scheidsrechter");
dAdapterLeden.UpdateCommand.Parameters.Add("@Zaalwacht", OleDbType.Boolean, 1, "Zaalwacht");
dAdapterLeden.UpdateCommand.Parameters.Add("@Tafel", OleDbType.Boolean, 1, "Tafel");
dAdapterLeden.UpdateCommand.Parameters.Add("@Scorer", OleDbType.Boolean, 1, "Scorer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Vervoer", OleDbType.Boolean, 1, "Vervoer");
dAdapterLeden.UpdateCommand.Parameters.Add("@Bondscheidsrechter", OleDbType.Boolean, 1, "Bondscheidsrechter");
dAdapterLeden.UpdateCommand.Parameters.Add("@Taken", OleDbType.Integer, 5, "Taken");
dAdapterLeden.UpdateCommand.Parameters.Add("@Takenzaalwacht", OleDbType.Integer, 5, "Taken_zaalwacht");
dAdapterLeden.UpdateCommand.Parameters.Add("@Zoeknaam", OleDbType.Char, 115, "Zoeknaam");
Als ik zelf voor de delete het command samenstel, gaat het onderstaande goed. Als ik "[Adres] is null" weglaat dan gaat het mis als ik een lid verwijder als het adres leeg is. Ik krijg dan weer de foutmelding "Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.".
dAdapterLeden.DeleteCommand = new OleDbCommand("DELETE FROM leden WHERE [Zoeknaam] = @Zoeknaam AND ([Adres] = @Adres or [Adres] is null)");
dAdapterLeden.DeleteCommand.Parameters.Add("@Zoeknaam", OleDbType.Char, 115, "Zoeknaam");
dAdapterLeden.DeleteCommand.Parameters.Add("@Adres", OleDbType.Char, 255, "Adres");
Iemand een idee wat hier het probleem is?
Iemand een idee wat de beste manier is om update-, insert- en deletecommands te maken?
Groet, Erik