Toon posts:

[ASP.NET] Record update niet in SQL Server*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Al een tijdje ben ik bezig met een formulier waarop staat, een textbox en een knop.
Zodra men op de knop drukt moet de tekst in de textbox worden opgeslagen in de database. Deze tekst wordt bij de page_load event al geladen met gegevens. En moet in diezelfde cell in de tabel van de d-base worden opgeslagen.

Nu lijkt alles goed te gaan, geen foutmeldingen etc. maar hij wordt vreemdgenoeg niet opgeslagen .. :(

Diverse dingen heb ik geprobeerd, maar het werkt niet goed, met insert niet met update niet... Wat doe ik dan fout ? :s Volgens mij is de code correct....

De code die achter de knop zit om de gegevens te updaten:

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
32
33
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand

        MyConnection = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))

        Dim UpdateCmd As String = "UPDATE leveringsvoorwaarden SET ID = @ID, wijze_best = @wijze_best where ID = @Id"

        MyCommand = New SqlCommand(UpdateCmd, MyConnection)

        MyCommand.Parameters.Add(New SqlParameter("@ID", SqlDbType.Int, 4))
        MyCommand.Parameters.Add(New SqlParameter("@wijze_best", SqlDbType.NVarChar, 500))

        MyCommand.Parameters("@Id").Value = 1
        MyCommand.Parameters("@wijze_best").Value = TextBox1.Text

        MyCommand.Connection.Open()

        Try
            MyCommand.ExecuteNonQuery()
            Label1.Text = "<b>Record Updated</b><br>" & UpdateCmd.ToString()
        Catch Exp As SqlException
            If Exp.Number = 2627 Then
                Label1.Text = "ERROR: Er is al een record met dezelfde primary key"
            Else
                Label1.Text = "ERROR: Kan niet updaten, fout geconstateerd."
            End If
        End Try

        MyCommand.Connection.Close()

    End Sub


Voor het vullen van de textbox uit de database gebruik ik deze code ( dit deel gaat dus wel goed ):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlDataAdapter

        MyConnection = New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
        MyCommand = New SqlDataAdapter("select * from leveringsvoorwaarden", MyConnection)

        DS = New DataSet

        Dim mytable As DataTable

        MyCommand.Fill(DS, "leveringsvoorwaarden")

        TextBox1.Text = DS.Tables("leveringsvoorwaarden").Rows(0).Item(1)

    End Sub

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

ASP.NET:
1
2
3
If Page.IsPostBack Then

End if

Verder kan je misschien de Quickstarts van ASP.Net ook nog eens doornemen. ASP != ASP.Net, btw.

* gorgi_19 gaat de rest van z'n verhaal over scheiding tussen PL en DAL maar achterwege laten....

* gorgi_19 vindt het trouwens ook vrij ranzig gecoded...
SQL:
1
select * from leveringsvoorwaarden

Terwijl je maar 1 regel en 1 kolom nodig hebt.. :X

[ Voor 96% gewijzigd door gorgi_19 op 11-07-2003 10:17 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Als ik zo naar je update query kijk, dan snap ik niet waarom je dit doet:
code:
1
2
3
update tabel
set id = @id
where id = @id

:?

Primary keys ga je toch niet gaan updaten?

Trouwens, wat is niet goed werken?

Verder: als je gegevens wilt aanpassen heb je een UPDATE nodig, wil je gegevens toevoegen heb je een insert nodig.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 11 July 2003 @ 10:18:
Als ik zo naar je update query kijk, dan snap ik niet waarom je dit doet:
code:
1
2
3
update tabel
set id = @id
where id = @id

:?

Primary keys ga je toch niet gaan updaten?

Trouwens, wat is niet goed werken?

Verder: als je gegevens wilt aanpassen heb je een UPDATE nodig, wil je gegevens toevoegen heb je een insert nodig.
Sowieso maakt deze regel alles nog wat vager:
Visual Basic .NET:
1
MyCommand.Parameters("@Id").Value = 1

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Als je slechts 1 waarde (1 regel, 1 kolom ophaalt), dan kan je beter je query aanpassen, en gebruik maken van de ExecuteScalar method van het SqlCommand object.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 11 July 2003 @ 10:23:
Als je slechts 1 waarde (1 regel, 1 kolom ophaalt), dan kan je beter je query aanpassen, en gebruik maken van de ExecuteScalar method van het SqlCommand object.
Daarnaast lijkt het me sterk dat foutcode
Visual Basic .NET:
1
Exp.Number = 2627  

kan optreden. (Als het echt doet wat het doet in jouw omschrijving, anders plak je een ander naampje aan deze errorcode.

Je kan ook
SQL:
1
Select kolomnaam FROM tabelnaam WHERE melp = 'spef' 

gebruiken.

Samenvattend.. Vergeet waar je mee bezig bent en ga eerst een aantal SQL tutorials doornemen en een flink aantal ASP.Net tutorials.. Je wekt bij mij te zeer het idee dat je nog geen idee hebt wat je aan het doen bent en het is volgens mij meer gegoochel dat het werkt dan dat je weet waarom het werkt.

Ik verwacht binnen 2 dagen een volgend topic met een relatief basisprobleem in minder nette code; vandaar de tip om een stuk onderbouwing er bij te nemen.

[ Voor 42% gewijzigd door gorgi_19 op 11-07-2003 10:30 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Wat hij niet doet is het aanpassen van gegevens, de oude data blijft gewoon staan....

De regel

code:
1
 MyCommand.Parameters("@Id").Value = 1


is verwijderd

en ook ID = @ID bij het SQL statemant is aangepast en aan het eind nu: ID=1

Dus zo:

code:
1
Dim UpdateCmd As String = "UPDATE leveringsvoorwaarden SET wijze_best = @wijze_best where ID = 1"

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Heb je wel een record in die tabel zitten die ID == 1 heeft?

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 11 July 2003 @ 10:31:
Wat hij niet doet is het aanpassen van gegevens, de oude data blijft gewoon staan....
En dit antwoord heb ik in de eerste 4 regels van m'n eerste reply al gegeven.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Ja, gorgi_19 heeft gelijk.

Als je het wilt snappen:

zet misschien eens een breakpoint in je page_load en in je button_click, en stap eens door je code.

https://fgheysels.github.io/


Verwijderd

Topicstarter
dat maakt anders helemaal nix uit....

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 11 July 2003 @ 10:59:
dat maakt anders helemaal nix uit....
Die fout zat er gegarandeerd in. Betekent dat er nog meer fouten in je code zit. Daarnaast ben ik heel benieud WAAR je dat stukje code hebt gezet.
whoami schreef op 11 July 2003 @ 10:36:
zet misschien eens een breakpoint in je page_load en in je button_click, en stap eens door je code.
Oftewel. Debuggen.

[ Voor 9% gewijzigd door gorgi_19 op 11-07-2003 11:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
het gaat toch allemaal goed ?! waarom dan debuggen....., ik krijg geen fout dus je zal ook nooit zien waar wel / niet wat gebeurt.

Hij geeft geen fout, alles gaat 'zogenaamd' goed, maar er wordt niets geupdate.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 11 July 2003 @ 11:05:
het gaat toch allemaal goed ?! waarom dan debuggen....., ik krijg geen fout dus je zal ook nooit zien waar wel / niet wat gebeurt.

Hij geeft geen fout, alles gaat 'zogenaamd' goed, maar er wordt niets geupdate.
Het werkt niet, dus het gaat niet goed. Of het werkt, of het werkt niet. Het is of goed, of fout. Geen enkele tussenoplossing mogelijk. Het werkt niet (goed), dus je code is fout.

Dus debuggen, zodat je PER VARIABELE kan kijken wanneer wat gevuld wordt in welke volgorde.

Daarnaast zie ik nog nergens mijn opmerking over Page.Postback terugkomen.

[ Voor 25% gewijzigd door gorgi_19 op 11-07-2003 11:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
heb de fout al, ik heb een textbox2 aangemaakt, en de inhoud van textbox 2 probeerde ik in de database te zetten, en het ging perfect !!!

De indhoud van de database werdt dus geplaatst in textbox1, edit ik dat en ( uitgaand van hoe het eerst was ) gebeurde er niets.

Nu komt keurig de inhoud van textbox2 erin.

Op een of het andere reden zag hij dus geen verandering in textbox1

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:40
Verwijderd schreef op 11 juli 2003 @ 11:05:
het gaat toch allemaal goed ?! waarom dan debuggen....., ik krijg geen fout dus je zal ook nooit zien waar wel / niet wat gebeurt.
Debuggen is wel meer dan nodig in gevallen waar je niet het gewenste resultaat krijgt. Debuggen is er niet alleen om fouten die je krijgt op te lossen.
Aangezien er iets niet goed ging (je kreeg niet het gewenste resultaat), moet je debuggen. Leer dat eens, ipv direct een topic op GoT te starten.
Het is niet alleen de taak van de programmeur om code te schrijven, maar ook om na te gaan of die code goed is, en tot het gewenste resultaat leidt. Gebeurt dat niet, dan moet de programmeur debuggen.
Hij geeft geen fout, alles gaat 'zogenaamd' goed, maar er wordt niets geupdate.
Als alles 'zogenaamd' goed gaat, waarop open je dan een topic?

https://fgheysels.github.io/

Pagina: 1