ADODB foutmelding in VB.net application

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Mijn vraag
Ik heb een applicatie waarmee ik via ADODB een database aanroep.
Nu ik na een lange tijd de applicatie wil updaten krijgen ik de volgende fout

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

dat gebeurd altijd als ik .Update aanroep na het maken van een database wijziging van een record

Zie hieronder de code:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        Dim RSReturn As New ADODB.Recordset
        Dim SQLString As String = "SELECT tbllogin.idtbllogin, tbllogin.Log_date, tbllogin.Log_user FROM tbllogin LIMIT 1;"
        Try
            RSReturn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
            RSReturn.CursorType = ADODB.CursorTypeEnum.adOpenDynamic
            RSReturn.LockType = ADODB.LockTypeEnum.adLockOptimistic
            RSReturn.Open(SQLString, cn)
            RSReturn.AddNew()
            'RSReturn.Fields.Item("Log_date").Value = Now
            RSReturn.Fields.Item("Log_user").Value = Environment.UserName
            RSReturn.Update()
        Catch ex As Exception
            MsgBox(ex.Message, ex.StackTrace)
        Finally

            RSReturn.Close()
            RSReturn = Nothing


Relevante software en hardware die ik gebruik
VB.net via Visual studio 2010 professional
ADODB 2.8

[ Voor 0% gewijzigd door RobIII op 05-06-2022 17:06 . Reden: Code tags toegevoegd ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • MSteverink
  • Registratie: Juni 2004
  • Laatst online: 10-04 20:16

Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
De vraag is hoe kan ik die foutmelding verhelpen die zich na het aanroepen van de .Update vertoont

Deze meldingen:

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Is er een reden waarom je geen Dapper of Entity Framework oid gebruikt? ADODB is vrij... prehistorisch (evenals VS 2010, maar ik neem aan dat je een legacy applicatie aan het aanpassen/onderhouden bent?) :X

Ik vermoed dat je connectie gewoon weg is op het moment dat je de query uitvoert. De stacktrace zou je meer info kunnen verschaffen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Ja daar heb je gelijk in. Die stacktrace word niet aangeroepen omdat hij bij de rsreturn.update vast loopt. En opnieuw de database openen lukt niet aangezien die verbinding al openstaat.

Het programma draait gewoon, ik kan wel gegevens toevoegen maar update daarin tegen

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:47

Onbekend

...

Heeft de waarde van Environment.UserName wel een normale waarde?
Anders eerst eens met hardcoded waarden proberen om een nieuwe regel toe te voegen.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Ja ook die waarde heb ik hardcoded geprobeerd! Maar in de applicatie werken alleen update functies niet zodra er iets in de database aangepast dient te worden.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Heb je meerdere actieve recordsets? Werk je async/multithreaded?

Anyway, ik zou kijken of 't zich loont de zwik te herschrijven naar iets dat Dapper / EF / iets moderners dan ADODB gebruiken.

Edit:
Overigens, sowieso, nog eens kijkend naar je code: wat probeer je überhaupt te doen? Waarom doe je niet gewoon een insert i.p.v. een select met limit 1 en geen WHERE clause en daarna een addnew :?

[ Voor 86% gewijzigd door RobIII op 05-06-2022 16:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Nee hij per keer 1 recordset, dat voert hij uit en stopt die daarna.
De Database verbinding blijft open.

Ja dat zou het beste zijn alleen is daar de tijd helaas niet voor.
Mooiste zou zijn dit aangegaan te krijgen weer.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

harolda1980 schreef op zondag 5 juni 2022 @ 16:18:
Nee hij per keer 1 recordset, dat voert hij uit en stopt die daarna.
En alles wordt netjes disposed?
harolda1980 schreef op zondag 5 juni 2022 @ 16:18:
De Database verbinding blijft open.
Waarom?

Check ook even de edit van mijn vorige post... Ik zie even niet waarom je überhaupt een select + addnew zou doen ipv gewoon meteen een insert.

[ Voor 17% gewijzigd door RobIII op 05-06-2022 16:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Ja alles word keurig afgesloten na elke aanroep functie
RSReturn.Close()
RSReturn = Nothing

In het programma werk je eigenlijk continue met gegevens van uit de database.
Die lees je en update je. En of voeg je nieuwe gegevens toe.

Waarom sommige keuzen gemaakt zijn kan ik je geen antwoord opgeven.
Het enige wat ik nu probeer is het werkend te krijgen. En ik snap dat er heus dingen beter en of anders hadden gekund.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

harolda1980 schreef op zondag 5 juni 2022 @ 16:33:
Het enige wat ik nu probeer is het werkend te krijgen. En ik snap dat er heus dingen beter en of anders hadden gekund.
Nou, dan begin eens met die paar regels code om te schrijven naar een insert ;)

Overigens: iets naar Nothing zetten is iets anders dan iets disposen ;)

[ Voor 43% gewijzigd door RobIII op 05-06-2022 16:56 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Ja die werkt! Alleen op deze manier werd de functie Now niet geaccepteerd.
Verkeerde datum en tijd format 06/05/2022 +tijd en de database staat 05/06/2022 +tijd

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

harolda1980 schreef op zondag 5 juni 2022 @ 16:55:
Ja die werkt! Alleen op deze manier werd de functie Now niet geaccepteerd.
Laat eens wat (relevante(!)) code zien dan?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Dit is het nu geworden!

Visual Basic .NET:
1
2
3
4
5
6
7
  Public Sub LoginRegistration()
        Dim cmd As ADODB.Command
        cmd = New ADODB.Command
        cmd.ActiveConnection = cn
        cmd.CommandText = "INSERT INTO `vm01kb`.`tbllogin` (`Log_date`, `Log_user`) VALUES ('" & DateFormat(Now) & "', 'Harold');"
        cmd.Execute()
    End Sub

[ Voor 2% gewijzigd door RobIII op 05-06-2022 17:06 . Reden: Code tags toegevoegd ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Gebruik alsjeblieft gewoon netjes parameterized queries. Dan sta je ook niet meer open voor SQL injection(s).

Maar, echt, je spaart jezelf zó veel ellende als je 't omschrijft naar Dapper bijvoorbeeld... En dat hoeft niet veel werk te zijn (hangt een beetje van 't project af).

Verder: wanneer je hier code post, gebruik dan a.u.b. code tags.

[ Voor 70% gewijzigd door RobIII op 05-06-2022 17:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • harolda1980
  • Registratie: Mei 2018
  • Laatst online: 03-11-2024
Ja dat snap ik. Ik ga even overleggen wat wij gaan doen met de applicatie.
En of ik die tijd er in wil steken om de applicatie helemaal om te bouwen.

Snap wel wat je bedoeld met parameterized queries.
Alleen in dit deel zitten de eenvoudige queries verder op word het gecompliceerder.
De vraag is of ik die ook omgebouwd krijg.

Zoals de applicatie nu gebouwd is weet ik exact wat ie doet.

Acties:
  • +1 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
ADODB is COM gebaseerd en je foutmelding is gewoon een nullptr dereference, dus de COM objects zijn alweer weg lijkt het. in .NET (wat je gebruikt) gebruik je ADO.NET, niet ADODB. Je kunt ADODB wel wrappen met een COM wrapper (gegenereerd voor je door visual studio) maar dat is niet aan te bevelen.

Een andere mogelijke oorzaak kan zijn dat je 32bit COM objects hebt en 64 bit .net code.

En vs2010? Vs community edition laatste versie is gratis en werkt veel beter: https://visualstudio.microsoft.com/vs/community/

[ Voor 14% gewijzigd door EfBe op 06-06-2022 09:11 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

harolda1980 schreef op zondag 5 juni 2022 @ 21:37:
Ja dat snap ik. Ik ga even overleggen wat wij gaan doen met de applicatie.
En of ik die tijd er in wil steken om de applicatie helemaal om te bouwen.
Je hoeft 'm niet eens helemáál om te bouwen. Met een Dapper kun je het op een per-query basis doen; bij een EF wordt het iets lastiger (maar ook nog wel te doen als 't moet).
harolda1980 schreef op zondag 5 juni 2022 @ 21:37:
Alleen in dit deel zitten de eenvoudige queries verder op word het gecompliceerder.
De vraag is of ik die ook omgebouwd krijg.
Ik kan me zo géén scenario voorstellen wat je met Dapper niet zou kunnen doen (én ook nog eens makkelijker). Het is dan ook een laag óp ADODB.Net.
harolda1980 schreef op zondag 5 juni 2022 @ 21:37:
Zoals de applicatie nu gebouwd is weet ik exact wat ie doet.
Again: Not to argue, maar een Dapper maakt 't alleen maar eenvoudiger, niet ingewikkelder.

[ Voor 50% gewijzigd door RobIII op 06-06-2022 11:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1