Toon posts:

[VB.NET] query uitvoer op server controleren

Pagina: 1
Acties:

Verwijderd

Topicstarter
In mijn site wil ik, wanneer een gebruiker een regel toevoegt aan mn database, een melding geven dat dit gelukt is. Ik wil dus kunnen controleren of de toevoeg-query ook echt uitgevoerd en gelukt is.

Nu zie ik zelf al een makkelijke maar erg omslachtige oplossing. Nml. de gebruikersinvoer controleren met de gegevens in de database. Als dit overeenkomt is de query dus uitgevoerd.

Maar dit moet veel makkelijker kunnen lijkt me zo. Misschien iets met dat 'try/catch/finally principe of zo? Of is dit alleen voor foutafhandeling??

( Voor de lolbroeken onder ons... een oplossing in de trend van het volgende zie ik niet zitten. Is nml. geen oplossing :+ )
Visual Basic .NET:
1
2
3
4
conn.Open()
  cmd.ExecuteNonQuery()
conn.close()
txtMelding.Text = "yep, query is uitgevoerd"

[ Voor 3% gewijzigd door Verwijderd op 13-10-2003 10:53 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 13 October 2003 @ 10:52:
In mijn site wil ik, wanneer een gebruiker een regel toevoegt aan mn database, een melding geven dat dit gelukt is. Ik wil dus kunnen controleren of de toevoeg-query ook echt uitgevoerd en gelukt is.

Nu zie ik zelf al een makkelijke maar erg omslachtige oplossing. Nml. de gebruikersinvoer controleren met de gegevens in de database. Als dit overeenkomt is de query dus uitgevoerd.

Maar dit moet veel makkelijker kunnen lijkt me zo. Misschien iets met dat 'try/catch/finally principe of zo? Of is dit alleen voor foutafhandeling??

( Voor de lolbroeken onder ons... een oplossing in de trend van het volgende zie ik niet zitten. Is nml. geen oplossing :+ )
Visual Basic .NET:
1
2
3
4
conn.Open()
  cmd.ExecuteNonQuery()
conn.close()
txtMelding.Text = "yep, query is uitgevoerd"
hoezo zie je die oplossing niet zitten? oke hier controleer je inderdaad niet of het goed of fout is gegaan. Het probleem waar je mee zit is denk wat er gebeurt als een query niet lukt!
Als er een exception gegooit wordt dat je insert niet gelukt is moet je het inderdaad met een try catch doen op de volgende manier
C#:
1
2
3
4
5
6
7
8
9
try
{
    InsertCommand.Execute();
    Message.Text = "Het is gelukt";
}
catch( InsertFailedException )
{
    Message.Text = "Het is niet gelukt";
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Kijk voor de grap eens in de help naar de uitleg over het ExecuteNonQuery method en de return value daarvan.
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1.
Daarnaast kan je nog altijd van bovenstaande oplossing van rwb gebruik maken, die eigenlijk mooier is.

[ Voor 16% gewijzigd door whoami op 13-10-2003 11:04 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
rwb schreef op 13 October 2003 @ 10:57:
C#:
1
2
3
4
5
6
7
8
9
try
{
    InsertCommand.Execute();
    Message.Text = "Het is gelukt";
}
catch( InsertFailedException )
{
    Message.Text = "Het is niet gelukt";
}
Wat wordt dit voor mij in vb.net dan? Zoiets?
Visual Basic .NET:
1
2
3
4
5
6
7
8
try
    conn.open()
        cmd.ExecuteNonQuery()
    conn.close()
    Message.Text = "Het is gelukt"
catch ee As InsertFailedException
    Message.Text = "Het is niet gelukt"
end try


Nu geeft ie de volgende melding:
Type 'InsertFailedException' is not defined.

[ Voor 9% gewijzigd door Verwijderd op 13-10-2003 11:41 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 October 2003 @ 11:40:
[...]


Wat wordt dit voor mij in vb.net dan? Zoiets?
Het vertalen van C# syntax naar VB.NET syntax kan je makkelijk zelf doen. Desnoods neem je de help er maar bij.

Ivm je exception: Je moet niet verwachten dat alles hier voorgekauwd wordt naar compile-ready code.
Die exception is gewoon geen geldige .NET excpetie. Maw, die Exception bestaat niet.
Ga eens kijken in de help welke exceptions er allemaal gegooid kunnen worden door een ExecuteNonQuery() statement, en vang die op.

[ Voor 39% gewijzigd door whoami op 13-10-2003 11:42 ]

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

Een InsertFailedException is ook geen standaard exceptie. 't is trouwens maar de vraag of je uberhaupt geinteresseerd bent als gebruiker welke exceptie gegooid wordt.

[ Voor 49% gewijzigd door gorgi_19 op 13-10-2003 11:43 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
arggg..... hallo, ik ben absoluut geen progger, dit is alleen een extra onderdeel van mijn afstuderen. Ik vraag gewoon iets, heb nog een week... kan hier geen uren in gaan steken... al helemaal niet hoe ik C# omzet in VB.

Ik heb al genoeg om uit te zoeken. WHOAMI, je mag wel een modje zijn en zeggen dat ik verwacht dat me alles voorgekauwd wordt... dat doe ik niet. Maar bruikbare hulp stel ik wel op prijs. Geef ik zelf immers ook waar ik dat kan!

ik heb al in de classbrowser gekeken bij de sqlclient-namespace (Class System.Data.SqlClient.SqlException ) en ik zie daar niets wat ik zou kunnen gebruiken... Kan niemand mij nou helpen??

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

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
conn.open()

try
    cmd.ExecuteNonQuery()
    Message.Text = "Het is gelukt"
catch ee As Exception
    Message.Text = "Het is niet gelukt"
Finally
    conn.close()
end try


:?

[ Voor 31% gewijzigd door gorgi_19 op 13-10-2003 11:51 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 October 2003 @ 11:49:
ik heb al in de classbrowser gekeken bij de sqlclient-namespace (Class System.Data.SqlClient.SqlException ) en ik zie daar niets wat ik zou kunnen gebruiken... Kan niemand mij nou helpen??
Je kan die SqlException dan dus opvangen, of zoals gorgi het al voortoont, gewoon de Exception. Alle Exception classes erven over van die Exception class.
Een SqlException heeft aan dat er iets fout gelopen is bij een db-operatie.

https://fgheysels.github.io/


Verwijderd

Topicstarter
nou, ik heb het zo gedaan als gorgi heeft getypt.. maar het werkt dus niet. De query wordt niet uitgevoerd en ik krijg ook "Het is niet gelukt" niet te zien...

Maar moet de code niet iets zijn in de trend van:
------------------------------------------------------
Try
...
Catch [uitzondering] [As type ] [When uitdrukking]
... [catch-statements]
Finally
... [finally-statements]
End try
------------------------------------------------------

Dat haal ik hier tenminste uit een boek... maar wat zou ik dan als uitdrukking op moeten geven :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 October 2003 @ 12:50:
nou, ik heb het zo gedaan als gorgi heeft getypt.. maar het werkt dus niet. De query wordt niet uitgevoerd en ik krijg ook "Het is niet gelukt" niet te zien...
Hoezo het werkt niet?
Het werkt wel, blijkbaar is er iets foutgelopen, en is het niet gelukt.
Zorg eens dat je catch blok er zo uit ziet:
code:
1
2
3
4
5
6
7
8
catch( SqlException ex )
{
   MessageBox.Show(ex.Message);
}
catch( Exception ex )
{
  MessageBox.Show(ex.Message);
}

maar dan wel in vb.net natuurlijk.

Dan zal je de precieze foutmelding te zien krijgen, en weet je ookwaarom het niet gelukt is.

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

Dat een SQL statement niet wordt uitgevoerd, wil niet zeggen dat het geen geldig SQL statement is en wordt als zodanig ook niet door de try-catch-finally blokken ondervangen.

Verder kan het zijn dat of je reference naar Message fout is of de method niet wordt uitgevoerd, als het de tekst van Message niet verschijnt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik heb de volgende code geprobeerd en krijg nog niets te zien... geen exceptionmessage en ook geen "doet't". Dus de code wordt helemaal niet doorlopen of zo :|
Visual Basic .NET:
1
2
3
4
5
6
7
8
try
      cmd.ExecuteNonQuery()
      txtEx.Text = "doet't"
   catch ee As Exception
      txtEx.Text = ee.message
   Finally
      conn.close()
end try

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 13 oktober 2003 @ 13:27:
Ik heb de volgende code geprobeerd en krijg nog niets te zien... geen exceptionmessage en ook geen "doet't". Dus de code wordt helemaal niet doorlopen of zo :|
Visual Basic .NET:
1
2
3
4
5
6
7
8
try
      cmd.ExecuteNonQuery()
      txtEx.Text = "doet't"
   catch ee As Exception
      txtEx.Text = ee.message
   Finally
      conn.close()
end try
Als je niets te zien krijgt, kan je je blind staren op dit stukje code, maar ik krijg steeds meer het idee dat dit stukje code helemaal niet bereikt wordt en de fout dus ergens anders ligt.


Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Private Sub Testhandler()

            ' hier wat code
            Exit Sub

            Try
                cmd.ExecuteNonQuery()
                txtEx.Text = "doet't"
            Catch ee As Exception
                txtEx.Text = ee.Message
            Finally
                conn.close()
            End Try
        End Sub
O-) O-)

[ Voor 31% gewijzigd door gorgi_19 op 13-10-2003 13:31 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Dat kan niet he, je moet of het een, of het andere krijgen.
Stap er eens door met de debugger, en kijk wat er gebeurt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
euhm ja... dat was eens een andere topic van mij. Ik heb geen debugger, ik gebruik dreamweaver mx

(heb wel webmatrix, maar zit daar een debugger bij?)

zonder die 'try' zooi lukte het me wel om de query uit te voeren. Dus het moet aan dit stukje code liggen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 oktober 2003 @ 13:33:
euhm ja... dat was eens een andere topic van mij. Ik heb geen debugger, ik gebruik dreamweaver mx
Het .NET framework heeft wel een debugger hoor... ;)
Je kunt die vanop de commandline uitvoeren, kijk eens naar
cordbg.exe en dbgclr.exe

https://fgheysels.github.io/


Verwijderd

Topicstarter
nou, ik heb die dbgclr.exe geopend.. ff gekeken, maar geen idee hoe ik em aan mijn site moet koppelen :? (cordbg.exe ook geprobeerd, maar een fatsoenlijke GUI is al heel wat beter)

Misschien is een stukje code van mijn submit-knop ook wel handig?

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub btnToevoegen_Click(Source As Object, E As EventArgs)
        Dim strBuilder as new StringBuilder()
        If page.IsValid then
                strBuilder.Append("INSERT INTO categorie ")
                strBuilder.Append("(naam, omschrijving) VALUES(")
                strBuilder.Append("'" + Request("txtNaam") + "',")
                strBuilder.Append("'" + Request("txtOmschrijving") + "')")
        
                Dim sSQL as string = strBuilder.ToString()
                Dim cmd as SqlCommand = new SqlCommand(sSQL, conn)
                
                conn.open()

                try
                    cmd.ExecuteNonQuery()
                    txtEx.Text = "doet't"
                catch ee As Exception
                    txtEx.Text = ee.message
                Finally
                    conn.close()
                end try
        End if
    End Sub

[ Voor 13% gewijzigd door Verwijderd op 13-10-2003 14:17 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 October 2003 @ 14:17:
nou, ik heb die dbgclr.exe geopend.. ff gekeken, maar geen idee hoe ik em aan mijn site moet koppelen :? (cordbg.exe ook geprobeerd, maar een fatsoenlijke GUI is al heel wat beter)
Je moet de debugger attachen aan het te debuggen proces.

Waarom maak je in je SQL statement geen gebruik v. parameters ipv je string te concaten?
Gebruik maken van parameters is veiliger en beter voor de performance.

Print je SQL statement eens naar het scherm voor je het uitvoert, en kijk of er daar niets fout in zit.

[ Voor 29% gewijzigd door whoami op 13-10-2003 14:21 ]

https://fgheysels.github.io/


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

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
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
34
        Sub btnToevoegen_Click(ByVal Source As Object, ByVal E As EventArgs)

            If Not Page.IsValid Then Exit Sub
            Dim strBuilder As StringBuilder = New stringbuilder
            strBuilder.Append("INSERT INTO categorie ")
            strBuilder.Append("(naam, omschrijving) VALUES(")
            strBuilder.Append("'" + Request("txtNaam") + "',")
            strBuilder.Append("'" + Request("txtOmschrijving") + "')")

            Dim sSQL As String = strBuilder.ToString()
            Dim cmd As SqlCommand = New SqlCommand(sSQL, conn)
            Trace.Write("btnToevoegen_Click", "Connectie te openen")
            conn.open()
            Trace.Write("btnToevoegen_Click", "Connectie geopend")
            Me.txtEx.Text = "doet't"
            Trace.Write("btnToevoegen_Click", "try statement ingaan")
            Try
                Trace.Write("btnToevoegen_Click", "Proberen om query uit te voeren")
                cmd.ExecuteNonQuery()
                Trace.Write("btnToevoegen_Click", "Query uitgevoerd")
            Catch ee As Exception
                Trace.Write("btnToevoegen_Click", "Exceptieblok ingegaan")
#If DEBUG Then
                Throw ee
#Else
                txtEx.Text = ee.Message
#End If
            Finally
                Trace.Write("btnToevoegen_Click", "Finally statement")
                conn.close()

            End Try

        End Sub

Maar moet er geen handler by, bijvoorbeeld:
Visual Basic .NET:
1
Sub btnToevoegen_Click(Source As Object, E As EventArgs) Handles btnToevoegen.Click

En verder wat whoami zegt.

[ Voor 12% gewijzigd door gorgi_19 op 13-10-2003 14:25 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ja, ok dat heb ik geprobeerd, maar ik weet niet welk proces.. dacht eerst (volgens mijn logica) dat dit aan het iexplore.exe gekoppeld moest worden, maar daar kreeg ik een melding in de trend van:

- Unable to attach to the process. There is no managed code running in the process -

aspnet_wp.exe vervolgens geprobeerd, leek het ook niet te zijn. Verder zie ik geen processen die ook maar in de richting van de naam van mijn webapp. gaan :?

Verwijderd

Topicstarter
de query is goed, dat weet ik zeker
Waarom maak je in je SQL statement geen gebruik v. parameters ipv je string te concaten?
Gebruik maken van parameters is veiliger en beter voor de performance.
Je bedoelt gebruik maken van stored procedures?

[ Voor 77% gewijzigd door Verwijderd op 13-10-2003 14:52 ]


Verwijderd

Topicstarter
hmmm.... op de 1 of andere manier is de page niet valid... daarom voert ie de code niet uit. Ik heb RequiredFieldValidators in de pagina staan. Maar als deze geen fout geven moet dat goed zijn.

Waardoor kan mijn pagina niet valid zijn??

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

gorgi_19

Kruimeltjes zijn weer op :9

Hoe ziet je PAge_load er uit?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Zo ziet mn page_load eruit
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Page_Load(Source As Object, E As EventArgs)
        Dim cmdcat as new SqldataAdapter("SELECT id, naam FROM cat", conn) ' voor vullen van 
        Dim cmdWE as new SqldataAdapter("SELECT id, naam FROM we", conn)   ' dropdownlists

        If IsPostBack then
            txtNaam.Text = ""
            txtOmschrijving.Text = ""
        End if

        conn.Open()
        cmdcat.Fill(dsCategorie, "cat")
        cmdWE.Fill(dsWE, "we")
        conn.Close()
        page.databind()
    End sub

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

gorgi_19

Kruimeltjes zijn weer op :9

Zie je de mogelijke fout zelf al? :P

Zeker als je weet dat het Load-Event gefired wordt VOOR het Click event? :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 13 October 2003 @ 14:28:

Je bedoelt gebruik maken van stored procedures?
Dat mag, maar dat hoeft niet.
Ik denk dat ik hier wel al eens voorbeeldjes gepost heb van parametrized queries in .NET.
't Komt er in het kort op neer dat je je SQL statement zo schrijft:
code:
1
sSQL = "INSERT INTO tabel (veld, veld1) VALUES (@param1, @param2)";


En dat je dan die parameters gaat gaan opvullen:
code:
1
2
SqlCommand1.Parameters.Add ("@param1", SqlDbType.Int);
SqlCommand1.Parameters["@param1"].Value = "whoami\'s field";

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Het vullen van die comboboxen hoef je trouwens ook niet iedere keer te doen als je een postback hebt dacht ik...

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 13 October 2003 @ 15:10:
Het vullen van die comboboxen hoef je trouwens ook niet iedere keer te doen als je een postback hebt dacht ik...
Klopt, tenzij je viewstate niet enabled hebt... Alleen verliezen ze dan wel hun geselecteerde waarde.

En hoe kom je er bij dat het comboboxen zijn? Het zijn toch dropdownboxen? afaik kent ASP.Net niet standaard comboboxen.

[ Voor 17% gewijzigd door gorgi_19 op 13-10-2003 15:12 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
gorgi_19 schreef op 13 October 2003 @ 15:12:
[...]

En hoe kom je er bij dat het comboboxen zijn? Het zijn toch dropdownboxen? afaik kent ASP.Net niet standaard comboboxen.
Najah, ik zeg altijd comboboxen.

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zoals al gezegd is door whoami en gorgi_19 bestaat InsertFailedException natuurlijk niet en het was alleen maar even om te laten zien hoe je op een nette manier je exception op kan vangen. Natuurlijk kan je ook gewoon Exception opvangen maar mischien wil je dat wel niet. Voor de rest moet je inderdaad eens in je code kijken bij de page_load na de regel
Visual Basic .NET:
1
If IsPostBack then

Daarna moet je eens wat over de volgorde van execution zoeken in een asp.net Page. Dan zal het vrij duidelijk zijn waarom je Page.IsValid false returnt in combinatie met je required field validators.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1