Avatar billede rebuilder Nybegynder
09. marts 2005 - 13:44 Der er 57 kommentarer og
1 løsning

Forbindelse til MySQL-server

Kan man få en VB-applikation til at arbejde sammen med en MySQL-database???

I så fald, hvordan?
Avatar billede arne_v Ekspert
09. marts 2005 - 13:47 #1
VB6 eller VB.NET ?
Avatar billede arne_v Ekspert
09. marts 2005 - 13:48 #2
For VB.NET hent enten ByteFX MySQL provider for .NET eller MySQL Connector/.NET
(det er samme software !).

Eksempel på brug (simpel conosle app):

Imports System
Imports System.Data
Imports ByteFX.Data.MySqlClient

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As MySqlConnection = New MySqlConnection ("Database=Test;Data Source=localhost;User Id=;Password=")
        con.Open
        Dim sel As MySqlCommand = New MySqlCommand ("SELECT * FROM T1", con)
        Dim rdr As MySqlDataReader = sel.ExecuteReader
        While rdr.Read
            Dim f1 As Integer = rdr(0)
            Dim f2 As String = rdr(1)
            Console.WriteLine(f1 & " " & f2)
        End While
        rdr.Close
        con.Close
    End Sub
End Class
Avatar billede rebuilder Nybegynder
10. marts 2005 - 10:08 #3
Det kan vel også lade sig gøre at connecte til en server der ikke ligger på localhost, f.eks. B-one's eller Surftown's ???

Dit eksempel kan vel også bruges i en applikation med et GUI?

Hvor henter jeg et af de omtalte programmer?

Hvor indsætter jeg det du har skrevet?
Avatar billede arne_v Ekspert
10. marts 2005 - 10:32 #4
Avatar billede arne_v Ekspert
10. marts 2005 - 10:33 #5
Det afhænger jo lidt af hvordan du skal bruge det.
Avatar billede rebuilder Nybegynder
10. marts 2005 - 11:28 #6
For at lære hvordan man gør, kunne det være rart først at tjekke om der er forbindelse til serveren... hvordan gør jeg det?

Hvordan finder jeg ud af hvad "source" skal sættes til?

Det med placeringen, der tænkte jeg jo på, at man ikke kan sætte en Class ind under en Sub... ???
Avatar billede arne_v Ekspert
10. marts 2005 - 11:30 #7
Data Source er navnet (IP netværks navnet) på MySQL serveren.
Avatar billede arne_v Ekspert
10. marts 2005 - 11:30 #8
New MySqlConnection

smider en exception hvis der ikke er forbindelse
Avatar billede arne_v Ekspert
10. marts 2005 - 11:32 #9
En Sub kan derimod være i en Class.

Du skal have lavet en connection.

Og så skal du vælge mellem:

DataReader

og

DataAdapter + DataSet

til at få vist data med
Avatar billede rebuilder Nybegynder
10. marts 2005 - 13:22 #10
Så disse kan skrives ind i en Sub???

Til connection:

Dim con As MySqlConnection = New MySqlConnection ("Database=Test;Data Source=localhost;User Id=;Password=")

Til datahentning:

Dim sel As MySqlCommand = New MySqlCommand ("SELECT * FROM T1", con)

---

hvad bruges "Dim rdr As MySqlDataReader = sel.ExecuteReader" til?

Og hvor skal de 3 Imports.... skrives henne?
Avatar billede arne_v Ekspert
10. marts 2005 - 13:26 #11
De 3 imports skal helt op i toppen.
Avatar billede arne_v Ekspert
10. marts 2005 - 13:26 #12
Dim sel As MySqlCommand = New MySqlCommand ("SELECT * FROM T1", con)

laver en kommando

Dim rdr As MySqlDataReader = sel.ExecuteReader

udfører en kommando (og resultatet hentes med data readeren).
Avatar billede arne_v Ekspert
10. marts 2005 - 13:27 #13
Programmer du i PHP eller ASP ? (så kunne jeg sammenligne koden med en af dem)
Avatar billede rebuilder Nybegynder
10. marts 2005 - 14:15 #14
Jeg programmerer PHP med MySQL...

I min funktion til at connecte med, kan jeg så skrive:

Dim con As MySqlConnection = New MySqlConnection ("Database=Test;Data Source=localhost;User Id=;Password=")

Men hvordan laver jeg "con" til en public-variabel, så den kan læses overalt?

Og hvordan får man et output så man ved om der blev connected eller ej?

Slutteligt, hvordan finder jeg så ud af hvilken IP-adresse jeg skal skrive i source, så den forsøger at connecte til MySQL-serveren på mit surftown-webhotel?
Avatar billede rebuilder Nybegynder
10. marts 2005 - 14:48 #15
...den exception du nævnte, hvordan opfanger jeg den? (mht. svar fra serveren)
Avatar billede arne_v Ekspert
10. marts 2005 - 15:17 #16
Du kan fange exception med en try catch blok.
Avatar billede arne_v Ekspert
10. marts 2005 - 15:18 #17
IP adressen må du have i docs fra dit web hotel
Avatar billede arne_v Ekspert
10. marts 2005 - 15:18 #18
Du kan lave con til en instans varuabel i klassen
Avatar billede arne_v Ekspert
10. marts 2005 - 15:21 #19
Dim con As MySqlConnection = New MySqlConnection ("Database=Test;Data Source=localhost;User Id=;Password=")
        con.Open

mysql_connect og mysql_select_db

        Dim sel As MySqlCommand = New MySqlCommand ("SELECT * FROM T1", con)
        Dim rdr As MySqlDataReader = sel.ExecuteReader

mysql_query

        While rdr.Read

while mysql_fetch_array

            Dim f1 As Integer = rdr(0)

opslag i array

            Dim f2 As String = rdr(1)
            Console.WriteLine(f1 & " " & f2)
        End While
        rdr.Close
        con.Close
Avatar billede rebuilder Nybegynder
14. marts 2005 - 10:15 #20
C:\Documents and Settings\ceu40353\Dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(3): Namespace or type 'MySqlClient' for the Imports 'ByteFX.Data.MySqlClient' cannot be found.

Jeg har installeret Connector/Net 1.0, men tilsyneladende, er importen lavet til ByteFX... hvad skal den være istedet?
Avatar billede rebuilder Nybegynder
14. marts 2005 - 10:32 #21
Jeg har fundet oplysningerne til mit webhotel, som er som følger:

Hostname: mydb1.surftown.dk (212.97.132.71)
Database: tankbil_db
Bruger: <USR>
Kode: <PASS>

Så connection-strengen skal se således ud?:

Dim con As MySqlConnection = New MySqlConnection ("Database=tankbil_db;Data Source=212.97.132.71;User Id=<USR>;Password=<PASS>") ???

og "con.Open", hvad gør den?

Citat: "Du kan fange exception med en try catch blok."... hvordan?
Avatar billede rebuilder Nybegynder
14. marts 2005 - 10:36 #22
...og kan man tjekke om fejlen er opstået af fejlagtige login-oplysninger, eller af en manglende internet-forbindelse?
Avatar billede arne_v Ekspert
14. marts 2005 - 10:54 #23
Prøv og erstat

ByteFX.Data.MySqlClient

med

MySql.Data.MySqlClient
Avatar billede arne_v Ekspert
14. marts 2005 - 10:56 #24
Og tilføj en reference til den/de .dll filer som kommer med Connector/.NET
Avatar billede arne_v Ekspert
14. marts 2005 - 10:56 #25
Helt normalt.

Kender du Try Catch ?
Avatar billede rebuilder Nybegynder
14. marts 2005 - 11:02 #26
Hjælper ikke...

C:\Documents and Settings\ceu40353\Dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(3): Namespace or type 'MySqlClient' for the Imports 'MySql.Data.MySqlClient' cannot be found.

Hvordan tilføjer jeg referencer til dll-filer?

Jeg kender ikke try catch... men kan man lave en "Select Case" på con?
Avatar billede arne_v Ekspert
14. marts 2005 - 11:21 #27
Hvilken IDE bruger du ?
Avatar billede arne_v Ekspert
14. marts 2005 - 11:21 #28
Avatar billede rebuilder Nybegynder
14. marts 2005 - 11:25 #29
VB.NET?
Avatar billede rebuilder Nybegynder
14. marts 2005 - 11:38 #30
Burde denne ikke skrive "DivideByZeroException" fremfor "Exception", som den gør?

Module Module1

    Sub Main()
        Dim x As Integer = 0
        Dim div As Integer = 0
        x = 0
        Try
            div = 100 / x
        Catch de As DivideByZeroException
            Console.WriteLine("DivideByZeroException")
        Catch ee As Exception
            Console.WriteLine("Exception")
        Finally
            Console.WriteLine("Finally Block")
        End Try
        Console.WriteLine("Result is {0}", div)

    End Sub

End Module
Avatar billede rebuilder Nybegynder
14. marts 2005 - 11:41 #31
...og hvordan bruger jeg det til at tjekke om jeg har opnået forbindelse?
Avatar billede arne_v Ekspert
14. marts 2005 - 18:48 #32
Visual VB.NET (Visual Studio VB.NET only versionen) ?

Jeg bruger ikke selv Visual Studio.

Normalt gemmer referencer sig under project properties eller tilsvarende.
Avatar billede arne_v Ekspert
14. marts 2005 - 18:52 #33
div = 100 \ x

giver DivideByZeroException

div = 100 / x

giver OverflowException
Avatar billede arne_v Ekspert
14. marts 2005 - 18:53 #34
MySqlConnection smider en exception hvis ikke den kan connecte
Avatar billede arne_v Ekspert
14. marts 2005 - 18:55 #35
mere præcist : en MySqlException
Avatar billede arne_v Ekspert
14. marts 2005 - 18:55 #36
og et svar
Avatar billede rebuilder Nybegynder
17. marts 2005 - 12:00 #37
Ingen af følgende virker:

ByteFX.Data.MySqlClient
MySql.Data.MySqlClient

Skal computeren genstartes efter en installation af MySQL connector?

Dette har jeg ikke mulighed for, da computeren jeg benytter mig af, har DeepFreeze, der "cleanbooter"... Er det muligvis det der er galt?
Avatar billede rebuilder Nybegynder
17. marts 2005 - 12:06 #38
...kan det evt. klares uden "ekstern" software?
Avatar billede arne_v Ekspert
17. marts 2005 - 12:09 #39
Hvis du har tilføjet en reference til MySql.Data.dll så skal MySql.Data.MySqlClien
virke.
Avatar billede arne_v Ekspert
17. marts 2005 - 12:10 #40
Nej - .NET kommer ikke med MySQL support out of the box
Avatar billede rebuilder Nybegynder
17. marts 2005 - 12:14 #41
en reference?... ja det er rigtigt, det skrev du noget om...

Fik ikke helt fat i hvordan det funkede... (hvor denne reference skal placeres)
Avatar billede rebuilder Nybegynder
17. marts 2005 - 12:17 #42
Dll'en findes 2 steder:

C:\Programmer\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.0\MySql.Data.dll

C:\Programmer\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.1\MySql.Data.dll

Skal der reference til begge, eller blot én, og i så fald hvilken?
Avatar billede arne_v Ekspert
17. marts 2005 - 12:39 #43
Forudsat at bruger Visual Studio 2003 så skal du bruge 1.1 versionen
Avatar billede arne_v Ekspert
17. marts 2005 - 12:40 #44
Du skal tilføje referencen til dit projekt (se 14/03-2005 18:48:20)
Avatar billede rebuilder Nybegynder
17. marts 2005 - 13:01 #45
Visual Studio .NET 2003...

Jeg har nu tilføjet "C:\Programmer\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.1\" under:

Projekt
  ->WindowsApplikation1 Properties
    ->Reference Path

Det virker stadig ikke med disse:

Imports MySql.Data.MySqlClient
Imports ByteFX.Data.MySqlClient

Namespace or type for "MySQLClient" for the Imports 'MySql.Data.MySqlClient' cannot be found

Namespace or type for "MySQLClient" for the Imports 'ByteFX.Data.MySqlClient' cannot be found
Avatar billede arne_v Ekspert
17. marts 2005 - 13:15 #46
Du skal tilføje en referenc til lige præcis den DLL
Avatar billede rebuilder Nybegynder
17. marts 2005 - 13:16 #47
...det kan jeg ikke... jeg kan kun vælge en folder.
Avatar billede arne_v Ekspert
17. marts 2005 - 13:30 #48
Så skal du vælge det et andet sted.
Avatar billede arne_v Ekspert
17. marts 2005 - 13:31 #49
Har project menuen ikke et "add reference" punkt ?
Avatar billede rebuilder Nybegynder
17. marts 2005 - 13:43 #50
Det funker nu...

Try
Dim con As MySqlConnection = New MySqlConnection("Database=tankbil_db;Data Source=212.97.132.71;User Id=bruger;Password=password")
Catch de As MySqlException 'Vi tjekker efter en MySQLException, hvilket forårsages af en fejl under forbindelses-processen
lbl_con.Text = "Der kunne ikke skabes forbindelse til databasen." 'FEJL-connection'
Catch ee As Exception

Finally

End Try

Hvordan fanger jeg følgende stadier:

Ingen forbindelse til serveren
Forbindelse til serveren, men forkerte login-oplysninger
Forbindelse til serveren, korrekte login-oplysninger
Avatar billede arne_v Ekspert
17. marts 2005 - 13:48 #51
Desværre smider den en MySqlException i alle 3 tilfælde.

Men du kan hente fejl teksten ud af de objektet
Avatar billede rebuilder Nybegynder
18. marts 2005 - 13:24 #52
Ligemeget hvad jeg gør, så får jeg denne fejl:

"Unable to connect to any of the specified MySQL hosts"

Når kommandoen gennemløbes, hænger applikationen rimelig længe... Der er åbenbart ikke forbindelse til 212.97.132.71 ???

Skal bestemte porte være åbne, for at kunne gøre dette?
Avatar billede rebuilder Nybegynder
18. marts 2005 - 13:35 #53
"Unable to connect to any of the specified MySQL hosts" -- er vel heller ikke fejlen man får ved forbindelse, men forkerte login-oplysninger?

Så jeg skal ikke bekymre mig om disse oplysninger endnu?

Hvis det er tilfældet, må du gerne teste, om du kan tilgå:

Dim con As MySqlConnection = New MySqlConnection("Database=tankbil_db;Data Source=212.97.132.71;User Id=tankbil_test;Password=lager123")
Avatar billede rebuilder Nybegynder
18. marts 2005 - 13:42 #54
Info fra surftown:

Hostnavn: mydb1.surftown.dk (212.97.132.71)
Port nummer: 3306 
Databasenavn: tankbil_db 

Prøv evt. at logge ind via:

http://mydb2.surftown.dk/phpMyAdmin/index.php (bruger:tankbil_test  -  kode:lager123)

(Tracert på: mydb2.surftown.dk giver ip'en : 212.97.132.72)

Dim con As MySqlConnection = New MySqlConnection("Database=tankbil_db;Data Source=212.97.132.72;User Id=tankbil_test;Password=lager123")  (funker heller ikke...)
Avatar billede rebuilder Nybegynder
18. marts 2005 - 14:27 #55
Jeg har hentet MySQL Administrator, herfra:

http://dev.mysql.com/downloads/administrator/1.0.html

Og jeg kan connecte til min localhost MySQL, men ikke den på surftown... hvad kan problemet være?

(Bruger jeg localhost i min VB.NET applikation, så funker sagerne)
Avatar billede arne_v Ekspert
18. marts 2005 - 14:32 #56
Det er et web hotel ikke ?

Det er ret almindeligt at web hoteller ikke tillader connections til databasen
udefra kun fra sider som ligger på web serveren på web hotellet.
Avatar billede rebuilder Nybegynder
18. marts 2005 - 14:38 #57
Okay... Ja det er jo ret skidt...

Hvad gør man så?... nogen gode forslag?
Avatar billede arne_v Ekspert
18. marts 2005 - 21:19 #58
Du kan upload ASP.NET sider til dit web hotel og de kan bruge databasen.

Du kan administerere database via PHPMyAdmin.

Men til en applikation hjemme hos dig selv må du enten bruge din egen MySQL
eller lave det som:

VB.NET app ----- web service på web hotel ---- MySQL database
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester