[ASP.NET] error met OleDB object

Pagina: 1
Acties:

  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
Ik heb deze code om een query samen te stellen:

Visual Basic .NET:
1
2
3
4
5
6
7
8
Dim UpdateCommand As OleDbCommand = new OleDbCommand()
UpdateCommand.CommandText = "UPDATE tbl_users SET " _
            & "username='" & usernamevalue & "', " _
            & "password='" & userpassvalue & "', " _
            & "firstname='" & firstnamevalue & "', " _
            & "lastname='" & lastnamevalue & "', " _
            & "accountID=" & accounttypevalue & " " _
            & "WHERE userID=" & useridvalue

vervolgens maak ik gebruik van de volgende code om de query uit te voeren:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Dim myConnection As New OleDbConnection(ConnectionString)
UpdateCommand.Connection = myConnection

Try
            myConnection.Open()
            UpdateCommand.ExecuteNonQuery()
Catch ex as Exception
            Message.Text = "Met deze query is iets mis:<br>" & 
UpdateCommand.CommandText & "<br>"    
Finally
            myConnection.Close()
End Try

en dan krijg ik deze error:
System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
het beats me... maar het wordt nog :? :? .. wanneer ik de query verander naar:
Visual Basic .NET:
1
2
3
4
5
6
UpdateCommand.CommandText = "UPDATE tbl_users SET " _
            & "username='" & usernamevalue & "', " _
            & "firstname='" & firstnamevalue & "', " _
            & "lastname='" & lastnamevalue & "', " _
            & "accountID=" & accounttypevalue & " " _
            & "WHERE userID=" & useridvalue

oftewel het stukje met het password gaat er tussenuit.. dan doet ie het wel. Dan zou je denken dat het aan de DB ligt, maar de password kolom (in Access DB) is gewoon een String kolom zonder toeters of bellen.

wat ook :? is, wanneer ik de query zoals die er uiteindelijk uit komt te zien bijv:
code:
1
2
3
4
5
6
7
UPDATE tbl_users 
SET username='bla', 
password='bla', 
firstname='jack', 
lastname='box', 
accountID=5 
WHERE userID=7


kopieer naar een SQL editor / brinkster's eigen dbmanager en ik laat de query uitvoeren dan werkt het wel. Het ligt dus niet aan de database. Het lijkt mij iets te zijn met een OleDB object o.i.d... ik weet alleen niet zeker... iemand?

[ Voor 29% gewijzigd door bille op 07-04-2003 12:56 ]

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
Ik weet niet wat de oorzaak is, maar de code kan korter:

Het hele commandobject weglaten en vervangen door:
myConnection.execute (<Hier komt je update-string>)

Overigens, zit er niet toevallig een bijzonder teken in het password ('), waardoor 'ie over z'n nek gaat ?
(Laat maar, dit is onzin, want het werkt wel in SQL Query analyzer)

[ Voor 43% gewijzigd door StevenK op 07-04-2003 12:49 ]

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
Overigens, zit er niet toevallig een bijzonder teken in het password ('), waardoor 'ie over z'n nek gaat ?
zie hier:
code:
1
2
3
4
5
6
7
UPDATE tbl_users 
SET username='bla', 
password='bla', 
firstname='jack', 
lastname='box', 
accountID=5 
WHERE userID=7

ehm... ik heb net ffies gekeken.. maar volgens mij kan het niet wat jij zegt. Overgens heb ik andere motivatie om het niet korter te doen en dat is leesbaarheid. Wtf maken die 5 extra regels code nou uit? Zolang als dat het maar niet inefficient wordt.

edit: en niet te vergeten de exceptionhandling!

maare.. system.data.OleDBconnection ondersteunt de methode execute volgens mij niet. De methode wordt niet overerfd uit superclasses en zelf implementeerd het object de functie ook niet.. Waar haal jij vandaan dat OleDbConnection dat wel zou kunnen dan? Ik kan me natuurlijk vergissen, dus enlighten me Sir BraveKnight :)

[ Voor 19% gewijzigd door bille op 07-04-2003 12:59 . Reden: tralalala ]

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Het ligt totaal niet aan je VB.NET code, maar aan je SQL statement.
De error zegt immers:
error in UPDATE syntax.

Wat je alleszins al kunt doen is, zorgen dat je dat idveld expliciet cast naar een string:
code:
1
"WHERE userid = " & useridvalue.ToString()


Maar, je kunt het nog beter doen door mbhv parameters te werken. Je SQL string ziet er dan als volgt uit:
code:
1
OleDbCommand1.CommandText = "UPDATE tabel SET column1 = @p_waarde1 WHERE id = @p_id";


Je moet dan natuurlijk wel nog de juiste waardes aan die parameters doorgeven.
code:
1
2
3
4
5
6
OleDbCommand1.Parameters.Add ("@p_waarde1", OleDbType.VarChar);
OleDbCommand1.Parameters.Add ("@p_id", OleDbType.Integer);

OleDbCommand1.Parameters["@p_waarde1"].Value = "somevalue";
OleDbCommand1.Parameters["@p_id"].Value = 7;
OleDbCommand1.ExecuteNonQuery();

Op die manier kan je op een veel veiligere manier met SQL omgaan. (Geen SQL injection etc).

Dit is wel C# code

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
StevenK schreef op 07 April 2003 @ 12:45:
Ik weet niet wat de oorzaak is, maar de code kan korter:
Kortere code is niet altijd beter. ;)
Kortere code komt niet altijd de duidelijkheid en leesbaarheid ten goede. :)
Overigens, zit er niet toevallig een bijzonder teken in het password ('), waardoor 'ie over z'n nek gaat ?
(Laat maar, dit is onzin, want het werkt wel in SQL Query analyzer)
Indien dit toch het geval is, kan het vermeden worden door gebruik te maken van parameters.

https://fgheysels.github.io/


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
bille schreef op 07 April 2003 @ 12:55:
[...]

zie hier:
code:
1
2
3
4
5
6
7
UPDATE tbl_users 
SET username='bla', 
password='bla', 
firstname='jack', 
lastname='box', 
accountID=5 
WHERE userID=7

ehm... ik heb net ffies gekeken.. maar volgens mij kan het niet wat jij zegt.
* StevenK zit hier de hele tijd met adodb te coden, en raakt daardoor ff in de war.
Overgens heb ik andere motivatie om het niet korter te doen en dat is leesbaarheid. Wtf maken die 5 extra regels code nou uit? Zolang als dat het maar niet inefficient wordt.
Het gaat mij niet om die vijf regels, maar om het gebruik van een command-object. Als je adodb gebruikt heb je dat hele commandobject niet nodig.

Overigens is het idee om met variabelen te werken ook niet onaardig.

Andere variant is natuurlijk gewoon een recordset te openen, juiste record op te zoeken en veld voor veld bij te werken.

Dat is nog handiger voor je exceptionhandling, omdat eventuele problemen al per veld boven kunnen komen drijven.

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
StevenK schreef op 07 April 2003 @ 13:12:
[...]


Het gaat mij niet om die vijf regels, maar om het gebruik van een command-object. Als je adodb gebruikt heb je dat hele commandobject niet nodig.
Als je met .NET werkt, dan werk je niet met het 'gewone' ADO, maar met ADO.NET.
Daarin zitten dus een aantal database-classes waarmee je kan werken.
Andere variant is natuurlijk gewoon een recordset te openen, juiste record op te zoeken en veld voor veld bij te werken.
Dergelijke recordsets bestaan niet meer in .NET
Er bestaat wel nog een DataReader, maar dat is een forward only en read only cursor.
(Trouwens, dergelijke oplossing -recordset openen en record zo bijwerken- vind ik echt ranzig. Het is gewoon veel netter om dat via SQL te doen.)

https://fgheysels.github.io/


  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
whoami.. heb je mijn post goed gelezen? kijk goed naar de sql query die ik neerzet. Daar zit géén fout in volgens mij...

ik weet ook dat ik met parameters kan werken met een OleDBCommand, maar dat helpt me niet echt het probleem te debuggen gezien er dan alleen nog maar additionele fouten kunnen optreden.
Wat je alleszins al kunt doen is, zorgen dat je dat idveld expliciet cast naar een string
dat is de default functie van iedere variabele indien je geen operatie gebruikt. Net zoals in JAVA bijvoorbeeld.

Overgens is wat jij zegt niet een expliciete cast. Je roept daar de toString() aan en die maakt als ik me niet vergis gebruik van
code:
1
Cstr(useridvalue)


anywayz.. daar ligt het probleem niet. Het probleem zit em in het password.. maar ik zie niet wat :?
quote: StevenK
Andere variant is natuurlijk gewoon een recordset te openen, juiste record op te zoeken en veld voor veld bij te werken.

Dat is nog handiger voor je exceptionhandling, omdat eventuele problemen al per veld boven kunnen komen drijven.
Ja dat kan wel kloppen, ik heb alleen het betreffende veld al gevonden zoals in mijn eerste post stond, dat is namelijk het password veld. Alleen daar is niets mis mee.. het is gewoon een String veld .. helemaal standaard..


overgens ben ik ontdaan over hoe SLECHT de openingstopic wordt gelezen..

[ Voor 30% gewijzigd door bille op 07-04-2003 13:23 ]

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
bille schreef op 07 april 2003 @ 13:16:
whoami.. heb je mijn post goed gelezen? kijk goed naar de sql query die ik neerzet. Daar zit géén fout in volgens mij...
Ik zie ook niet direct een fout.
Daarom suggereer ik dat je eens met parameters moet werken.
Als er iets mis is met het password veld, kan het op die manier evt. opgelost worden.
ik weet ook dat ik met parameters kan werken met een OleDBCommand, maar dat helpt me niet echt het probleem te debuggen gezien er dan alleen nog maar additionele fouten kunnen optreden.
Hoezo, dan kunnen er alleen maar additionele fouten optreden? Wat is dat voor kwatsch?
Als er dan fouten optreden, dan kan je ze verhelpen en zo leer je bij.
Het is trouwens ook een nettere oplossing, dus om die met zo'n opmerking af te wimpelen is gewoon een teken van laksheid.
dat is de default functie van iedere variabele indien je geen operatie gebruikt. Net zoals in JAVA bijvoorbeeld.
Ben je dat zeker?
Ik heb geen ervaring met VB.NET, maar in C# wordt die functie alleszins niet impliciet aangeroepen als je ze zelf niet aanroept.
In C# geeft onderstaande code trouwens een compiler error:
code:
1
string s = "blaat " + 4;

Maar, daar zal het probleem idd niet liggen.
anywayz.. daar ligt het probleem niet. Het probleem zit em in het password.. maar ik zie niet wat :?
Ik ook niet. Niet moeilijk trouwens, als je het passwoord veld niet post.
overgens ben ik ontdaan over hoe SLECHT de openingstopic wordt gelezen..
Nou goed, anders helpen we je niet. Er worden hier suggesties gedaan waar je niet eens wilt naar luisteren.

https://fgheysels.github.io/


  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
Het is trouwens ook een nettere oplossing, dus om die met zo'n opmerking af te wimpelen is gewoon een teken van laksheid.
ook als bij een standaard datapage in webmatrix de hele zooi al voorgecode is incl. parameters e.d.? ik heb die sjit er juist uitgehaald.. eerst maar eens kijken wat er nu fout gaat zónder parameters was mijn idee. Dán eventueel parameters erbij voegen.
Er worden hier suggesties gedaan waar je niet eens wilt naar luisteren.
whatever..als ik in de openingspost de query neerzet.. en de volgende post wordt er gevraagd of er geen rare tekens in de query staan.. tja sorry dat ik daarom zucht. Wie de schoen past trekt hem aan...

suggesties zijn altijd welkom.. wat jij zegt met de parameters.. dat heb ik al gedaan.. ook toen ging het fout. Dat had ik er inderdaad wel bij moeten zetten, my bad, nederig excuus ;)

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
whoami schreef op 07 April 2003 @ 13:15:
Dergelijke recordsets bestaan niet meer in .NET
Ik d8 er meer aan een adOpenDynamic te gebruiken:

Ongeveer zoiets:
Visual Basic .NET:
1
2
3
4
5
6
7
8
Dim myRs As New ADODB.Recordset()
myRs.Open("select * from tblweblog", myConn, 
        ADODB.CursorTypeEnum.adOpenDynamic, 
        ADODB.LockTypeEnum.adLockOptimistic)
myRs.AddNew()
myRs("weblog").Value = "Dit is een test"
myRs.Update()
myRs.Close()

[ Voor 11% gewijzigd door StevenK op 07-04-2003 14:07 ]

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Kan het niet zijn dat ie door het woord 'password' raar gaat doen of zo?
Probeer die eens te renamen.
(Zou wel heel erg stom zijn, maar goed, je weet maar nooit :) )

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
maikel schreef op 07 april 2003 @ 14:12:
Kan het niet zijn dat ie door het woord 'password' raar gaat doen of zo?
Probeer die eens te renamen.
(Zou wel heel erg stom zijn, maar goed, je weet maar nooit :) )
password is een reserved word in T-SQL, maar dan zou het ook in SQL Query analyzer niet moeten werken.

Misschien kan de OP wel ff proberen om password tussen [] te zetten ? Dan weet je zeker dat evt. reserved word problemen opgelost zijn.

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
maikel schreef op 07 April 2003 @ 14:12:
Kan het niet zijn dat ie door het woord 'password' raar gaat doen of zo?
Probeer die eens te renamen.
(Zou wel heel erg stom zijn, maar goed, je weet maar nooit :) )
Heb ik ook al aan gedacht, maar voor zover ik weet, denk ik niet dat password een reserved word is....
StevenK schreef op 07 april 2003 @ 14:04:
[...]

Ik d8 er meer aan een adOpenDynamic te gebruiken:

Ongeveer zoiets:
Visual Basic .NET:
1
2
3
4
5
6
7
8
Dim myRs As New ADODB.Recordset()
myRs.Open("select * from tblweblog", myConn, 
        ADODB.CursorTypeEnum.adOpenDynamic, 
        ADODB.LockTypeEnum.adLockOptimistic)
myRs.AddNew()
myRs("weblog").Value = "Dit is een test"
myRs.Update()
myRs.Close()
Zo'n dingen bestaan dus niet meer in .NET.
:)

[ Voor 41% gewijzigd door whoami op 07-04-2003 14:17 ]

https://fgheysels.github.io/


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
whoami schreef op 07 april 2003 @ 14:17:
[...]


Heb ik ook al aan gedacht, maar voor zover ik weet, denk ik niet dat password een reserved word is....


[...]

Zo'n dingen bestaan dus niet meer in .NET.
:)
* StevenK houdt zich ff in, telt tot 10 enzo.

Ik zit dit net in .NET in te kloppen, dus echt wel dat het werkt !

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
StevenK schreef op 07 April 2003 @ 14:16:
[...]

password is een reserved word in T-SQL, maar dan zou het ook in SQL Query analyzer niet moeten werken.

Misschien kan de OP wel ff proberen om password tussen [] te zetten ? Dan weet je zeker dat evt. reserved word problemen opgelost zijn.
Ja, dat leek mij ook al. Maar misschien dat de Query Analyzer automatisch overal [] omheen zet alvorens de query uit te voeren?
Als al het andere niet werkt, moet je de onlogische opties ook proberen.

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 22:38
maikel schreef op 07 April 2003 @ 14:20:

Als al het andere niet werkt, moet je de onlogische opties ook proberen.
Dat klinkt als veel ervaring :D

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
http://www.phpfreaks.com/...endix.html#KEYWORDS-TABLE

hmm.. PASSWORD is wel een keyword volgens phpfreaks.. maar niet reserved o.i.d.

Ik kan me ook niet voorstellen dat het daarom fout gaat.. want had bij het maken van de DB dan niet iets fout moeten gaan? (Access DB) maar een rename zou niet gek zijn opzich..

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
StevenK schreef op 07 April 2003 @ 14:22:
[...]

Dat klinkt als veel ervaring :D
Haha.
Check maar eens wat topics van mij hier, zitten er vast wel een aantal bij waar niemand een antwoord op weet. :)
Blijkbaar wil/doe ik altijd dingen die niemand anders wil. :D

  • bille
  • Registratie: Mei 2000
  • Laatst online: 05-08 23:45

bille

Don't call me Buff

Topicstarter
Ik zit dit net in .NET in te kloppen, dus echt wel dat het werkt !
hmm ik zat net ff te zoeken in de classbrowser van webmatrix en daar zit geen ADO meer in.. VB.NET heeft dus niet standaard meer een implementatie van ADO. Wellicht dat jij additionele classes hebt op je systeem.. misschien zitten die standaard wél bij MS VS.NET ofzo?

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
StevenK schreef op 07 april 2003 @ 14:19:
[...]

* StevenK houdt zich ff in, telt tot 10 enzo.

Ik zit dit net in .NET in te kloppen, dus echt wel dat het werkt !
Ben je zeker dat je dan managed CLR code hebt?
Tuurlijk kan je nog met ado werken in .NET, maar die code is dan niet meer managed door de runtime.

https://fgheysels.github.io/


  • oZy
  • Registratie: Juli 2001
  • Laatst online: 19:48

oZy

De fout zit em in de query, niet in de ASP.NET code, waarom blijft iedereen dan doorzagen over die code :?

Anyway, ik zou toch maar eens proberen je columns te taggen, werkt zowiezo duidelijk..

Table: tblUsers
usrID
usrUsername
usrPassword
usr... etcetera

In de nieuwe .NET Magazine editie staat trouwens een uitgebreid voorbeeld van de DataGrid, DataList, verbindingen maken, en gegevens muteren met ASP.NET en VB.NET

Hier wordt ook gewerkt met de parameters zoals whoami al aangaf, dit is veel duidelijker, en makkelijker (geen gezeur meer met apostrophes etc.)

Neem anders ook even de voorbeelden van MSDN door om een solide manier van programmeren aan te leren.
Pagina: 1