[ASP.net2] Updatecommand

Pagina: 1
Acties:

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 15:24
Hoogstwaarschijnlijk maak ik weer een denk fout, maar omdat ik zelf zolang naar de code heb ik gekeken kan ik er gewoon geen fout aan ontdekken.
Het gaat om volgende code:
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
25
26
27
28
29
30
31
// Verbinding maken met databases
        SqlConnection conGebruikers = new SqlConnection(sqldsGebruikers.ConnectionString);
        SqlConnection conAdvertenties = new SqlConnection(sqldsAdvertenties.ConnectionString);

        // Updatecommand
        SqlCommand UpdateCommand = new SqlCommand();
        UpdateCommand.Connection = conAdvertenties;
        UpdateCommand.CommandText = "UPDATE AdvertentieAD SET Prijs = @Prijs, AdvertentieTitel = @AdvertentieTitel, AdvertentieTekst = @AdvertentieTekst, CategorieID = @CategorieID WHERE AdvertentieID = '"+ AdvertentieID+"'";

        // van textbox naar string
        string Prijs = txtPrijs.Text;
        string AdvertentieTitel = txtAdvertentieTitel.Text;
        int CategorieID = int.Parse(ddlCategorie.SelectedValue);
        // AdvertentieID = AdvertentieID
        string body;
        string AdvertentieTekst = txtAdvertentieTekst.Text;
        body = AdvertentieTekst.Replace(System.Environment.NewLine, "<br>");

        // String naar updatecommand
        UpdateCommand.Parameters.Add("@Prijs", SqlDbType.VarChar, 50).Value = Prijs;
        UpdateCommand.Parameters.Add("@AdvertentieID", SqlDbType.Int).Value = AdvertentieID;
        UpdateCommand.Parameters.Add("@AdvertentieTitel", SqlDbType.VarChar, 50).Value = AdvertentieTitel;
        UpdateCommand.Parameters.Add("@AdvertentieTekst", SqlDbType.VarChar).Value = body;
        UpdateCommand.Parameters.Add("@CategorieID", SqlDbType.Int).Value = CategorieID;

        // Updaten naar database
        
        conAdvertenties.Open();
        UpdateCommand.ExecuteNonQuery();
        lblFout.Text = "Uw gegevens zijn succesvol verwerkt";
        conAdvertenties.Close();

Geen build errors, alles lijkt te werken, maar de gegevens worden gewoon niet toegevoegd aan de database. Ik heb al via Google en GOT search verschillende dingen geprobeerd (!IsPostback toegevoegd, volgorde van uitvoeren, andere pagina erlangs die op dezelfde manier werkt, maar kan hier niets aan ontdekken)

Ik krijg dus geen debug errors, alles lijkt te werken totdat ik handmatig in de database ga kijken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19-02 23:53
Een UPDATE gaat ook niets toevoegen aan een DB, maar bestaande gegevens wijzigen.
Kijk eens met Sql Profiler wat er precies naar de query gestuurd wordt. Debug de webpage, en kijk wat de inhoud is van de variablen die je aan je parameters toewijst, en op welk moment die variablen gezet worden.
Dit is in feite gewoon een kwestie van debuggen.

https://fgheysels.github.io/


  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 15:24
Dat is ook de bedoeling. Er wordt in het updatecommand een rij opgezocht dmv. AdvertentieID (welke bekend is) en deze rij moet aangepast worden.

De variabelen zijn goed, want ik heb aan het eind van de code geprobeert de variabelen terug te kopieren naar een lege textbox. Dit gaf de correcte (gewijzigde) waarde weer.

Het debuggen levert geen foutmeldingen op, zoals ik TS al zei.

Edit, ook als ik een dataset met datagrid maak worden alle gegevens goed weergegeven. Het gaat dus ergens fout binnen het Updatecommand.
Ik heb nog nooit met sql profiler gewerkt maar zal eens kijken of ik iets kan vinden.

[ Voor 23% gewijzigd door Supermario16 op 14-06-2006 15:46 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 19-02 23:53
Debuggen levert meestal geen extra foutmeldingen op; dmv debuggen kan je nagaan welke code er op welk moment uitgevoerd wordt, en kan je checken wat de inhoud van de variablen is op het moment dat je ze naar de DB stuurt.
't Is niet omdat die variablen op het einde van de code de juiste waarde hebben, dat ze die ook hebben op het moment dat je je query uitvoert.
Trouwens.... waarom gebruik je overal parameters in je query, en dan net voor één variable niet meer ? Waarom gebruik je daar ook geen parameter ?

Je voegt trouwens een parameter toe (AdvertentieId), die je niet eens gedefinieerd hebt in je query. (Je plakt die variable er nl. gewoon aan in je query)

https://fgheysels.github.io/


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 16:41
code:
1
UpdateCommand.ExecuteNonQuery();


Wat geeft dit terug?

  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 15:24
Omdat AdvertentieID een globale variabele is, welke uit een vorige pagina via sessie wordt overgehaald. De inhoud van de variabelen is oke, deze heb ik gecontroleerd.

Ben nog steeds lerende, maar wat bedoel je met parameters? De grootte van de varChars, of doel je hiermee op AdvertentieID?

Reactie op DrClearBottom,
Wat bedoel je, hij heeft iig geen foutmelding op dat stukje code, hij lijkt het gewoon te verwerken.

[ Voor 19% gewijzigd door Supermario16 op 14-06-2006 16:18 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 16:41
met AdvertentieID doe je idd nogal vreemd. je voegt hem in de query niet als parameter toe, maar je voegt hem wel aan de collection van je command toe.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:52
Hij doelt op dit:
code:
1
UpdateCommand.Parameters.Add("@AdvertentieID", SqlDbType.Int).Value = AdvertentieID;

De parameter @AdvertentieID bestaat niet in je query.
Overigens zet in je query nu quotes om je AdvertentieId heen, terwijl de parameter een Int is. Als het in je db ook een Int is hoeven er geen quotes omheen, maar je kan er beter ook gewoon een parameter van maken.

[ Voor 6% gewijzigd door sig69 op 14-06-2006 16:21 ]

Roomba E5 te koop


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 16:41
Supermario16 schreef op woensdag 14 juni 2006 @ 16:17:
Omdat AdvertentieID een globale variabele is, welke uit een vorige pagina via sessie wordt overgehaald. De inhoud van de variabelen is oke, deze heb ik gecontroleerd.

Ben nog steeds lerende, maar wat bedoel je met parameters? De grootte van de varChars, of doel je hiermee op AdvertentieID?

Reactie op DrClearBottom,
Wat bedoel je, hij heeft iig geen foutmelding op dat stukje code, hij lijkt het gewoon te verwerken.
ExecuteNonquery geeft een integer terug met het aantal affected rows geloof ik, dan kun je zien of de database daadwerkelijk nog wat heeft gedaan.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19-02 23:53
Supermario16 schreef op woensdag 14 juni 2006 @ 16:17:
Omdat AdvertentieID een globale variabele is, welke uit een vorige pagina via sessie wordt overgehaald. De inhoud van de variabelen is oke, deze heb ik gecontroleerd.
Globale variablen zijn evil.
Echter, ik zie niet in waarom de reden die je opgeeft een geldige reden zou zijn om geen parameter te gebruiken ? :?
Ben nog steeds lerende, maar wat bedoel je met parameters? De grootte van de varChars, of doel je hiermee op AdvertentieID?
Ik doel hiermee op:
code:
1
string query = "UPDATE tabel SET veld1 = @bla WHERE id = " + id.ToString();

Waarom gebruik je voor veld1 een parameter (@bla), en voor id niet (daar ga je nl. gewoon die id gaan concateneren aan de string).
Verder is het ook zo dat je ergens een parameter aan je parameters collection toevoegt:
code:
1
command.Parameters.Add ("@advertientieId, ...");

terwijl je in je SQL commando (in de UPDATE dus), nergens een parameter hebt die @advertentieId heet.
Reactie op DrClearBottom,
Wat bedoel je, hij heeft iig geen foutmelding op dat stukje code, hij lijkt het gewoon te verwerken.
Het gaat niet om foutmeldingen. Blijkbaar heb je ergens een logische fout gemaakt.
ExecuteNonQuery heeft een return waarde van het type integer die aangeeft hoeveel rijen er door de uitgevoerde query beinvloed werden.

[ Voor 10% gewijzigd door whoami op 14-06-2006 16:23 ]

https://fgheysels.github.io/


  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 15:24
[quote]whoami schreef op woensdag 14 juni 2006 @ 16:22:
[...]
Ik zal het een en ander nog aanpassen. Houd jullie op de hoogte, iig vast bedankt voor reacties tot nu toe.

Edit:
De ExecuteNonQuery maakt (volgens een return) geen wijzigingen aan in de database. Hij geeft 0 terug. Ik ga nog een keer na een andere pagina kijken die qua functionaliteit hetzelfde hoort te werken (maar ook echt werkt) of ik toch ergens een fout kan ontdekken... :?

Edit2:
Heb trouwens ook die parameters aangepast:
code:
1
UpdateCommand.CommandText = "UPDATE AdvertentieAD SET Prijs = @Prijs, AdvertentieTitel = @AdvertentieTitel, AdvertentieTekst = @AdvertentieTekst, CategorieID = @CategorieID WHERE AdvertentieID = @AdvertentieID";


Nog 'n Edit:
Als ik trouwens de permissies van de database verander (dwz, Update rechten weghaal) krijg ik ook geen foutmelding, ik begin haast te denken dat de verbinding naar de database niet goed is. Ik heb ook al een keer een nieuwe verbinding naar database gemaakt... Ben de draad beetje kwijt :/

[ Voor 81% gewijzigd door Supermario16 op 15-06-2006 09:47 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 19-02 23:53
Mocht je geen update rechten hebben op die tabel, dan zou je wel een exceptie krijgen.
Als je verbinding naar de DB niet goed is, dan krijg je ook een exceptie.

Wat het wel kan zijn: je WHERE clause voldoet aan geen enkel record.
Kijk eens mbhv de SQL Profiler wat er nu precies naar de DB gestuurd wordt.
Ben je zeker dat je het goede @AdvertentieId naar de DB stuurt ?

https://fgheysels.github.io/


  • Supermario16
  • Registratie: Mei 2004
  • Laatst online: 15:24
whoami schreef op donderdag 15 juni 2006 @ 16:27:
Mocht je geen update rechten hebben op die tabel, dan zou je wel een exceptie krijgen.
Als je verbinding naar de DB niet goed is, dan krijg je ook een exceptie.

Wat het wel kan zijn: je WHERE clause voldoet aan geen enkel record.
Kijk eens mbhv de SQL Profiler wat er nu precies naar de DB gestuurd wordt.
Ben je zeker dat je het goede @AdvertentieId naar de DB stuurt ?
Daar dacht ik idd vanmiddag ook aan. Ik heb het in eerste instantie gecontroleerd en toen was alles oke. Nu ben ik wat dieper gaan graven en blijkt idd van @AdvertentieID constant 0 als waarde te hebben. Nu ben ik van de globale variabele afgestapt en werkt het wel goed. Nu blijft advertentieID ook de goede waarde vasthouden. Thx voor alle reacties, opgelost _/-\o_
Pagina: 1