Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] missing operator query expression

Pagina: 1
Acties:

  • Erik888
  • Registratie: Augustus 2004
  • Laatst online: 31-10-2023
Ik heb een access database met gegevens van wedstrijden welke ik benader vanuit een C#-programma. Het openen en tonen van de diverse tabellen gaat prima, het updaten echter geeft problemen. Als ik bijvoorbeeld de poule wil bewerken dan wordt deze als volgt geopend:

C#:
1
2
3
4
5
dAdapterPoules = new OleDbDataAdapter("SELECT * FROM poule", connString);
OleDbCommandBuilder cBuilderPoules = new OleDbCommandBuilder(dAdapterPoules);
dTablePoules = new DataTable();
dAdapterPoules.Fill(dTablePoules);
dataGridPoules.DataSource = dTablePoules;


In de datagrid kunnen vervolgens diverse wijzigingen aangebracht worden, het eerste wat ik geprobeerd heb is:

C#:
1
dAdapterPoules.Update(dTablePoules);


Dit geeft "Syntax error in UPDATE statement".

Als ik de rowstate afvraag en de delete-, insert- en updatecommands samenstel dan krijg ik "Syntax error (missing operator) in query expression '@24sec Coach = @coach'.".
Moet ik per gewijzigde tabelregel de update aanroepen?
Iemand een idee wat ik verkeerd doe?

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
foreach (DataRow PouleRij in dTablePoules.Rows)
{
    if (PouleRij.RowState.ToString() == "Added")
    {
        dAdapterPoules.InsertCommand = new OleDbCommand("INSERT INTO poule, tijdsduur, [scheids thuis], [scheids uit], bondscheids, tafel, scorer, [30 sec], Coach, Trainer " +
            "VALUES (@poule, @tijdsduur, @scheids1, @scheids2, @bondscheids, @tafel, @scorer, @24sec, @coach, @trainer");
        dAdapterPoules.InsertCommand.Parameters.Add("@poule", OleDbType.Char, 50, PouleRij["poule"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@tijdsduur", OleDbType.Char, 50, PouleRij["tijdsduur"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@scheids1", OleDbType.Integer, 10, PouleRij["scheids thuis"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@scheids2", OleDbType.Integer, 10, PouleRij["scheids uit"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@bondscheids", OleDbType.Boolean, 1, PouleRij["bondscheids"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@tafel", OleDbType.Char, 50, PouleRij["tafel"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@scorer", OleDbType.Char, 50, PouleRij["scorer"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@24sec", OleDbType.Char, 50, PouleRij["30 sec"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@coach", OleDbType.Char, 50, PouleRij["Coach"].ToString());
        dAdapterPoules.InsertCommand.Parameters.Add("@trainer", OleDbType.Char, 50, PouleRij["Trainer"].ToString());
    }

    if (PouleRij.RowState.ToString() == "Deleted")
    {
        dAdapterPoules.DeleteCommand = new OleDbCommand("DELETE FROM poule WHERE poule = @poule");
        //dAdapterPoules.DeleteCommand.Parameters.Add("@poule", OleDbType.Char, 50, PouleRij["poule"].ToString());
    }

    if (PouleRij.RowState.ToString() == "Modified")
    {
        dAdapterPoules.UpdateCommand = new OleDbCommand("UPDATE poule SET tijdsduur = @tijdsduur, [scheids thuis] = @scheids1, " +
            "[scheids uit] = @scheids2, bondscheids = @bondscheids, tafel = @tafel, scorer = @scorer, [30 sec] = @24sec " +
            " Coach = @coach, Trainer = @trainer WHERE poule = @poule");
        dAdapterPoules.UpdateCommand.Parameters.Add("@tijdsduur", OleDbType.Char, 50, PouleRij["tijdsduur"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@scheids1", OleDbType.Integer, 10, PouleRij["scheids thuis"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@scheids2", OleDbType.Integer, 10, PouleRij["scheids uit"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@bondscheids", OleDbType.Boolean, 1, PouleRij["bondscheids"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@tafel", OleDbType.Char, 50, PouleRij["tafel"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@scorer", OleDbType.Char, 50, PouleRij["scorer"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@24sec", OleDbType.Char, 50, PouleRij["30 sec"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@coach", OleDbType.Char, 50, PouleRij["Coach"].ToString());
        dAdapterPoules.UpdateCommand.Parameters.Add("@trainer", OleDbType.Char, 50, PouleRij["Trainer"].ToString());
    }
}

[ Voor 5% gewijzigd door een moderator op 04-03-2008 11:33 . Reden: Code tags toegevoegd... ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Gebruik eens code-tags als je hier code-post, dat maakt de boel er heel wat leesbaarder op.

Als je in de MSDN eens leest wat de Update method van de DataAdapter doet, dan zal je lezen dat de DataAdapter dan dus voor iedere row het juiste command gaat gaan uitvoeren (UpdateCommand als de Rowstate Modified is, DeleteCommand als Rowstate Deleted is, etc... ).

Je hebt je Update command laten genereren door de command-builder; de foutmelding die je krijgt is dat er een syntax error zit in dat UPdate statement.
heb je al eens gekeken hoe dat Update Statement dat gegenereerd werd, er uit ziet ?

Trouwens, ik zie dat je de RowState gaat gaan omzetten naar een string, en dan gaat checken op die string. Waarom doe je dat ?
Da's helemaal niet 'veilig'. Wat als je een type-foutje maakt in de string waarop je checked ? Waarom vergelijk je gewoon niet met de verwachte enum ?


Zowiezo zou ik nooit column-names / parameter-names maken / gebruiken waar spaties in zitten ...

[ Voor 24% gewijzigd door whoami op 04-03-2008 10:33 ]

https://fgheysels.github.io/


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Zit er toevallig een spatie in je parameternaam? Of ben je een komma tussen je SET onderdelen vergeten? De foutmelding is vrij helder.

[ Voor 11% gewijzigd door bigbeng op 04-03-2008 10:31 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:22

gorgi_19

Kruimeltjes zijn weer op :9

je mist een komma na @24sec

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Erik888
  • Registratie: Augustus 2004
  • Laatst online: 31-10-2023
Ik heb de fout al gevonden, ik mis een komma na @24sec bij de update. Ik krijg nu een "concurrency violation", dus daar ga ik maar even op zoeken.