[VB.Net] executenonquery binnen reader

Pagina: 1
Acties:

  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
Ik probeer records te kopieren van de ene tabel naar de andere, om daarna de oude records te verwijderen. Ik heb daarvoor de volgende code bedacht:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        If MsgBox("records verwerken?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
            Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=H:\creaties\pda\check\werkinfo.mdb")
            Dim ver As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=H:\creaties\pda\check\werkinfo.mdb")
            Dim cmd1 As OleDb.OleDbCommand = con.CreateCommand()
            Dim cmd2 As OleDb.OleDbCommand = ver.CreateCommand()
            Dim cmd3 As OleDb.OleDbCommand = ver.CreateCommand()

            con.Open()
            ver.Open()

            cmd1.CommandText = "SELECT * FROM registraties WHERE object='" & tbObject.Text & "'"

            Dim reader As IDataReader = cmd1.ExecuteReader()

            While reader.Read()
                cmd2.CommandText = "INSERT INTO uitgelezen (ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur) VALUES ('" & reader.GetString(0) & "', '" & reader.GetDateTime(1) & "', '" & reader.GetString(2) & "', '" & reader.GetString(3) & "', '" & reader.GetString(4) & "', '" & reader.GetString(5) & "', '" & reader.GetValue(6) & "', '" & reader.GetValue(7) & "')"
                cmd2.ExecuteNonQuery()
            End While

            cmd3.CommandText = "DELETE FROM registraties WHERE object='" & lblObject.Text & "')"
            cmd3.ExecuteNonQuery()

            con.Close()
        End If


Maar nu krijg ik de volgende error, waarbij cmd2.executenonquery gemarkeerd wordt:

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll


Ik heb al gekeken of ik de values van insert wel goed heb beschreven: string tussen enkele aanhalingstekens, nummers zonder markering, datum tussen hekjes, maar het helpt niet...

...wie helpt wel :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:40

gorgi_19

Kruimeltjes zijn weer op :9

Staat er nog iets van een regelnummer bij?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
Nee, geen regelnummer, .net markeerd in het groen 'cmd2.ExecuteNonQuery()' in de reader

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Geen directe antwoord op je vraag, maar wist je dat je ook dit kan doen
code:
1
2
3
INSERT INTO uitgelezen (ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur)  
SELECT ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur
FROM registraties WHERE object='...'


Dit lijkt mij een stuk efficienter dan eerst alle data over te hevelen naar je eigen app en het vervolgens weer terug te stoppen in de database.

  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
waarom werkt cmd2executenonquery niet?
vergeet ik parameters ofzo?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:40

gorgi_19

Kruimeltjes zijn weer op :9

Zet je query eens op het scherm en controleer of deze goed is. Waarbij je niet moet vergeten dat tekst != numeriek.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Volgens MSDN is het een server-side exception, dus het ligt niet aan jouw applicatie. Waarschijnlijk ligt het aan de database.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Y3PP3R
  • Registratie: Oktober 2002
  • Laatst online: 11-08 19:48
ik heb de boel nu een beetje aangepast, aan de hand van de reacties:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
        If MsgBox("records verwerken?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
            Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=H:\creaties\pda\check\werkinfo.mdb")
            Dim myQry As String
            myQry = "INSERT INTO uitgelezen (ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur) SELECT ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur FROM registraties WHERE object='" & tbObject.Text & "'"
            MsgBox(myQry)
            Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(myQry, con)

            con.Open()
            'cmd.CommandText = "INSERT INTO uitgelezen (ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur) SELECT ID, Datum, Naam, Plaats, Object, Taken, Afstand, Duur FROM registraties WHERE object='" & lblObject.Text & "'"
            cmd.ExecuteNonQuery()
            con.Close()

        End If


Ik blijf dezelfde error krijgen bij cmd.executenonquery!

  • whoami
  • Registratie: December 2000
  • Nu online
Het zal een fout in je query zijn. Heb je alle velden goed geschreven, tabelnamen goed geschreven etc.... ?
Heb je wel een sql-string, want ik zie dat die in jouw code-voorbeeld in commentaar staat.

https://fgheysels.github.io/


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 24-08 14:46

LauPro

Prof Mierenneuke®

Misschien ergens:
code:
1
replace(lblObject.Text,"'","''")

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Verwijderd

Is 'object' geen reserved word voor je dbms?
Maak er es WHERE [object]=bla van...

Overigens kan je ook de queries verzamelen in een stringetje (met een ; ertussen) en ze dan in 1 keer uitvoeren.. scheelt weer een database tripje. Of nog mooier.. je maakt er een stored procedure van.
Pagina: 1