Toon posts:

[ASP.NET/C#] Database/Query probleem

Pagina: 1
Acties:
  • 55 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig met een update command in MySql en asp.net met als taal C#

m'n database heeft een VarChar(50) voor kolom username.
De connectie met de database is goed.

Deze code werkt niet:
code:
1
2
3
4
5
6
7
8
9
        string gebruiker = input_gebruiker.Text;
        string sql = "UPDATE admin SET username = @sql_gebruiker WHERE id='1'";
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        cmd.Parameters.Add("@sql_gebruiker", OdbcType.VarChar, 50).Value = gebruiker;
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();
        Response.Redirect("instellingen.aspx");


Deze code werkt weer wel, hier is het nieuwe wachtwoord al opgenomen in de query dan vervangt hij de nieuwe username wel.
code:
1
2
3
4
5
6
        string sql = "UPDATE admin SET username = 'nieuwegebruikersnaam' WHERE id='1'";
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();


De bedoeling is natuurlijk dat de nieuwe username uit een textbox gehaald word.. Zoals de bovenste code maar dat werkt niet :?
Iemand?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Dat hangt er maar helemaal van af wat er niet doet, welke foutmeldingen je krijgt en overige debuginformatie.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
bij de eerste code word er gewoon niks in de database geplaatst. De waarde die erin stond word geupdate door 'niks'.

Terwijl in de 2e code waar het nieuwe wachtwoord in de query staat wel in de database geplaatst word

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op zondag 13 augustus 2006 @ 14:52:
bij de eerste code word er gewoon niks in de database geplaatst. De waarde die erin stond word geupdate door 'niks'.

Terwijl in de 2e code waar het nieuwe wachtwoord in de query staat wel in de database geplaatst word
En heb je al gecontroleerd wat de waarden zijn die naar de database gaan en wat de waarde is in de textbox op het moment van versturen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 14-02 20:26
Tja, in de eerste zit er in de query geen ' om de string variabele. Terwijl je dat wel in het tweede voorbeeld doet. Als je nu eens ' om die @sql_gebruiker zet? Dat is ene enige verschil wat je ons geeft, voor de rest is het nogal gok werk zo.

[ Voor 20% gewijzigd door Sybr_E-N op 13-08-2006 14:54 ]


Verwijderd

Topicstarter
Sybr_E-N schreef op zondag 13 augustus 2006 @ 14:53:
Tja, in de eerste zit er in de query geen ' om de string variabele. Terwijl je dat wel in het tweede voorbeeld doet. Als je nu eens ' om die @sql_gebruiker zet? Dat is ene enige verschil wat je ons geeft, voor de rest is het nogal gok werk zo.
Als ik dat doe krijg je dit:
code:
1
2
3
4
5
6
7
8
        string gebruiker = input_gebruiker.Text;
        string sql = "UPDATE admin SET username = '@sql_gebruiker' WHERE id='1'";
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        cmd.Parameters.Add("@sql_gebruiker", OdbcType.VarChar, 50).Value = gebruiker;
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();

dan komt er in de database: @sql_gebruiker te staan.
gorgi_19 schreef op zondag 13 augustus 2006 @ 14:53:
[...]

En heb je al gecontroleerd wat de waarden zijn die naar de database gaan en wat de waarde is in de textbox op het moment van versturen?
de waarde in de textbox word een string en die string post ik in de database. door middel van het type VarChar(50)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op zondag 13 augustus 2006 @ 15:00:
de waarde in de textbox word een string en die string post ik in de database. door middel van het type VarChar(50)
Maar heb je ook echt gecontroleerd dmv een debugger dat die betreffende variabele ook met DIE waarde wordt gevuld of beredeneer je dat zelf?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op zondag 13 augustus 2006 @ 15:02:
[...]

Maar heb je ook echt gecontroleerd dmv een debugger dat die betreffende variabele ook met DIE waarde wordt gevuld of beredeneer je dat zelf?
dat beredeneer ik zelf, weet niet hoe ik dat kan controleren? maar als het goed is word de string uit de textbox toch geconverteerd naar de string 'gebruiker'

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op zondag 13 augustus 2006 @ 15:04:
[...]


dat beredeneer ik zelf, weet niet hoe ik dat kan controleren? maar als het goed is word de string uit de textbox toch geconverteerd naar de string 'gebruiker'
Blijkbaar gaat het fout, dus zal je moeten debuggen. Dat kan met VS2005 en anders nog altijd dmv Trace.Write / Response.Write.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op zondag 13 augustus 2006 @ 15:06:
[...]

Blijkbaar gaat het fout, dus zal je moeten debuggen. Dat kan met VS2005 en anders nog altijd dmv Trace.Write / Response.Write.
oke, alleen weet ik niet hoe dat moet en bovendien test ik m'n site alleen op internet omdat me database daar staat.

Geen ander idee om dit op te lossen? of andere manier om die string erin te krijgen, normaal gesproken moet de code toch goed zijn?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11-2025

dusty

Celebrate Life!

Titel Aangepast.

( ASP.net met de taal C#.. ehh.. zou dat dan niet c#.net moeten zijn ipv ASP?)

Controleer ook dat je velden inderdaad varchar zijn en niet nvarchar, nvarchar geeft soms problemen in combinatie met ODBC. (krijg je lege velden terug namelijk)
Verwijderd schreef op zondag 13 augustus 2006 @ 15:04:
[...]
dat beredeneer ik zelf, weet niet hoe ik dat kan controleren? maar als het goed is word de string uit de textbox toch geconverteerd naar de string 'gebruiker'
Zonder debugger? Gokje, print de waarden naar je output zodat je het kan zien?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op zondag 13 augustus 2006 @ 15:11:
Geen ander idee om dit op te lossen? of andere manier om die string erin te krijgen, normaal gesproken moet de code toch goed zijn?
Normaal wel, maar het werkt niet, dus is het fout. En je wil sites maken zonder te debuggen? Dan ga je vervolgens vrij vlot erna vastlopen. Of connect naar Internet (niet aan te raden), of maak een kopie waar je lokaal mee gaat werken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
dusty schreef op zondag 13 augustus 2006 @ 15:12:
Titel Aangepast.

( ASP.net met de taal C#.. ehh.. zou dat dan niet c#.net moeten zijn ipv ASP?)

Controleer ook dat je velden inderdaad varchar zijn en niet nvarchar, nvarchar geeft soms problemen in combinatie met ODBC. (krijg je lege velden terug namelijk)


[...]

Zonder debugger? Gokje, print de waarden naar je output zodat je het kan zien?
Ik krijg een error dat inderdaad de waarde niet null mag zijn in de database dus er word een null waarde verstuurd naar de database. Wat dus niet de bedoeling is...

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:26
Nog eens: print de query eens naar het scherm, zodat je ziet wat er precies gestuurd wordt.
Dit is gewoon basic debug werk; iets wat je als programmeur zowiezo moet kunnen:
Gebruik System.Diagnostics.Debug.WriteLine om output naar het console venster te sturen tijdens het debuggen, op die manier kan je eea zien.
Gebruik breakpoints en watches om stap voor stap door je code te lopen, en de inhoud van variablen at runtime te bekijken.
Op basis van deze informatie, en met de foutmelding bij de hand, moet je vlug zien / te weten komen wat er precies mis gaat, en waar, en dan volgt de oplossing ook meestal snel.

https://fgheysels.github.io/


Verwijderd

Topicstarter
de query die gebruikt word klopt wel en geeft ook het goede weer, daar ligt het dus niet aan.

m'n kolom heet 'inhoud' als ik de onderstaande code uitvoer krijg ik een foutmelding:

code:
1
2
3
4
5
6
7
8
9
10
11
12
        string gebruiker = "frits"
        //gebruiker = Convert.ToString(input_gebruiker.Text);

        string sql = "INSERT INTO test(inhoud) VALUES ("+gebruiker+")";
        
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        cmd.Parameters.Add("@sql_gebruiker", OdbcType.VarChar, 50).Value = gebruiker;
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();
        Label1.Text = sql;


Server Error in '/' Application.
--------------------------------------------------------------------------------

ERROR [42S22] [MySQL][ODBC 3.51 Driver][mysqld-4.1.20-community-nt]Unknown column 'khnk' in 'field list'
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.Odbc.OdbcException: ERROR [42S22] [MySQL][ODBC 3.51 Driver][mysqld-4.1.20-community-nt]Unknown column 'frits' in 'field list'

dat de column naam frits niet voorkomt in de 'field list' terwijl als ik van frits , inhoud maak dan treed er geen fout op en word er een lege entry geplaatst in de db.

  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Verwijderd schreef op maandag 14 augustus 2006 @ 01:58:
de query die gebruikt word klopt wel en geeft ook het goede weer, daar ligt het dus niet aan.

m'n kolom heet 'inhoud' als ik de onderstaande code uitvoer krijg ik een foutmelding:

code:
1
2
3
4
5
6
7
8
9
10
11
12
        string gebruiker = "frits"
        //gebruiker = Convert.ToString(input_gebruiker.Text);

        string sql = "INSERT INTO test(inhoud) VALUES ("+gebruiker+")";
        
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        cmd.Parameters.Add("@sql_gebruiker", OdbcType.VarChar, 50).Value = gebruiker;
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();
        Label1.Text = sql;


Server Error in '/' Application.
--------------------------------------------------------------------------------

ERROR [42S22] [MySQL][ODBC 3.51 Driver][mysqld-4.1.20-community-nt]Unknown column 'khnk' in 'field list'
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.Odbc.OdbcException: ERROR [42S22] [MySQL][ODBC 3.51 Driver][mysqld-4.1.20-community-nt]Unknown column 'frits' in 'field list'

dat de column naam frits niet voorkomt in de 'field list' terwijl als ik van frits , inhoud maak dan treed er geen fout op en word er een lege entry geplaatst in de db.
Probeer eens :

C#:
1
2
3
string sql = "INSERT INTO test(inhoud) VALUES ('"+gebruiker+"')";
ipv 
string sql = "INSERT INTO test(inhoud) VALUES ("+gebruiker+")";


Gebruik van parameters is trouwens echt wel aan te raden, zowel naar security als performantie v/d db toe (omdat de query anders bij iedere uitvoering geparsed moet worden).

  • empheron
  • Registratie: Mei 2004
  • Laatst online: 09-02 22:39
C#:
1
2
3
4
5
6
7
8
        string sql = "UPDATE admin SET username = @sql_gebruiker WHERE id='1'";
        OdbcConnection MyConnection = new OdbcConnection(MyConString);
        OdbcCommand cmd = new OdbcCommand(sql, MyConnection);
        cmd.Parameters.AddWithValue("@sql_gebruiker",input_gebruiker.Text);
        MyConnection.Open();
        cmd.ExecuteNonQuery();
        MyConnection.Close();
        Response.Redirect("instellingen.aspx");


In vb.net doe ik het meestal op bovenstaande wijze.

[ Voor 20% gewijzigd door empheron op 14-08-2006 09:08 ]


  • purge
  • Registratie: November 2000
  • Niet online
Als ik de reacties zo lees en wat je allemaal hebt gedaan denk ik niet dat het probleem de query naar de database is. Want deze update wel degelijk het record.
bij de eerste code word er gewoon niks in de database geplaatst. De waarde die erin stond word geupdate door 'niks'.
dan komt er in de database: @sql_gebruiker te staan.
Verder als je gebruik maakt van de door jou gemaakte query (met parameters) dan heeft het niet veel zin om deze query naar het scherm te printen, je krijgt dan netjes de parameternaam zelf op je scherm. Waar je wel wat aan hebt is om de string 'gebruiker' eens op het scherm te zetten of op een andere manier inzichtelijk te maken. Debugger? Zo te lezen in de reacties gaat hier iets niet lekker en ik ben niet de eerste die dit zegt ;)
Probeer eens om de string 'gebruiker' te vullen met een vaste waarde.
string gebruiker = "mijnnaam";

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:26
Tja, sorry hoor, maar dit draait gewoon uit een op een debug m'n code topic.

Verder is die code die je hier laatst gepost hebt, totaal zinloos. Je gebruikt string concatenation om je query op te bouwen, en dan voeg je ook een parameter toe aan de collection, wat geheel onnodig is, want je hebt geen parameter; de parameter die je toevoegt, is nergens in je query gespecifieerd.
Verder moet je string values tussen quotes zetten, en numerieke values niet.
Het is ook zowiezo afgeraden om string concat. te gebruiken, gebruik liever parametrized queries. Op die manier heb je zelf het geneuzel niet meer om al dan niet quotes te zetten, quotes te escapen of de datum in de juiste formaat te plaatsen.

Ik vraag me eigenlijk af of je wel weet waar je mee bezig bent ?
Ik stel voor dat je eens één en ander leest over ADO.NET en parametrized queries binnen .NET
klik

[ Voor 4% gewijzigd door whoami op 14-08-2006 09:50 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.