VB 2010: resultaat query naar variable

Pagina: 1
Acties:

Onderwerpen


  • wicked1980
  • Registratie: Maart 2007
  • Laatst online: 13-03-2024
Dat een mens zo knettergek kan worden van een zo simpel stukje code... 8)7

Voor het creëren van een aanmeldscherm wil ik een test tegen de database uitvoeren.
Daarvoor schiet ik een SELECT FROM af op een MySQL DB, en het resultaat daarvan is het ID nummer van de gebruiker

code:
1
select gebruiker_id from gebruikers where wachtwoord=SHA1('testest')


(ja, gebruikers met hetzelfde wachtwoord is een probleem, zit nog in testfase, staan maar 2 unieke wachtwoorden in tabel :P )

Omdat ik continu foutmeldingen krijg over de connectie met de DB heb ik wat checks ingebouwd in de code om de status van de connectie te checken. De connectie lukt ook gewoon, zo draait op hetzelfde scherm een pulldown menu (combobox) waarvan de waarden uit de MySQL DB komen.

Onderstaand de code die ik nu gebruik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Sub butlogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butlogin.Click

        Dim conn As MySqlConnection = New MySqlConnection
        Dim cmd As MySqlCommand = New MySqlCommand("select max(gebruiker_id) from gebruikers where wachtwoord=SHA1('testest')")
        conn.ConnectionString = serverstring

        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()

                'Dim antwoord As Integer = cmd.ExecuteScalar
                MsgBox(cmd.ExecuteScalar)
                MsgBox("MySQLconnectie geslaagd:")
            Else
                conn.Close()
                MsgBox("MySQLconnectie is dicht")
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub


omdat ik op dit moment aan het testen ben met EXECUTESCALAR gebruik ik max(gebruiker_id) in het SQL statement om te zorgen dat ik maar 1 record terugkrijg.

Als ik regel 11 en 12 uitschakel, dan wordt de connectie netjes opgebouwd.
Zet ik ze aan dan krijg ik deze foutmelding:

System.InvalidOperationException: Connection must be valid and open

Google laat me helaas in de steek, en kom dus geen poot verder.
Zo moeilijk moet het toch niet zijn om je variable te laden met het result van je query :?

  • wicked1980
  • Registratie: Maart 2007
  • Laatst online: 13-03-2024
Inmiddels toch goed gekregen met behulp van een collega met betere Google skills dan ik :P

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        Dim conn As MySqlConnection = New MySqlConnection
        Dim cmd As MySqlCommand = New MySqlCommand("select max(gebruiker_id) from gebruikers where wachtwoord=SHA1('testest')")
        conn.ConnectionString = serverstring
        cmd.CommandType = CommandType.Text
        cmd.Connection = conn

        Try
            If conn.State = ConnectionState.Closed Then
                conn.Open()

                Dim myScalar As Object
                myScalar = cmd.ExecuteScalar()
                MsgBox(myScalar.ToString)
                MsgBox("MySQLconnectie geslaagd:")
            Else
                conn.Close()
                MsgBox("MySQLconnectie is dicht")
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

  • wicked1980
  • Registratie: Maart 2007
  • Laatst online: 13-03-2024
@Mods, opgelost, mag slotje op wat mij betreft

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:

Afbeeldingslocatie: http://tweakers.net/ext/f/93OGDVn8zio6RrIck1qYj8ne/full.png


:Y)
wicked1980 schreef op donderdag 20 september 2012 @ 10:47:
(ja, gebruikers met hetzelfde wachtwoord is een probleem, zit nog in testfase, staan maar 2 unieke wachtwoorden in tabel :P )
Waarom test je dan niet gewoon met iets als where username = 'foo'? Je weet dat je je nu op een slippery slope naar een horror-uitkomst bevindt he?

[ Voor 25% gewijzigd door RobIII op 20-09-2012 11:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Waarom check je of die connectie open of gesloten is ?

Je creeërt een nieuwe connectie, dus die is altijd gesloten. En mocht die connectie dan toch al open zijn, dan voer je de query maar niet uit ?

En nadien ga je de connectie nooit sluiten ?

Rare logica ...

Ik zou het eerder zo doen (C# code dan):

code:
1
2
3
4
5
6
using( var conn = new MySqlConnection ("...") )
{
      var command = new MySqlCommand ("...")

      var result = command.ExecuteScalar();
}

https://fgheysels.github.io/