Mit MySQL-Datenbank verbinden & INSERT ausführen.

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von slice.

    Mit MySQL-Datenbank verbinden & INSERT ausführen.

    Hallo,
    ich möchte in meinem Programm mich mit einer MySQL-Datenbank verbinden und folgenden Code ausführen:

    SQL-Abfrage

    1. "INSERT INTO gmlist ('Spaltenname1', 'Spaltenname2', 'Spaltenname3') VALUES ('" & textbox1.text & "', '" & textbox2.text & "', '" & textbox3.text & "')"


    Wie realisier ich sowas?
    Hab es nach diesem Tutorial (administrator.de/index.php?content=90766) versucht, jedoch nicht hinbekommen.

    Danke,
    Lukas

    VB.NET-Quellcode

    1. Dim con As New SqlClient.SqlConnection
    2. Dim cmd As New SqlClient.SqlCommand
    3. Dim reader As SqlClient.SqlDataReader
    4. con.ConnectionString = "Data Source=......" 'hier deine source db ...
    5. cmd.Connection = con
    6. cmd.CommandText = "INSERT INTO gmlist ('Spaltenname1', 'Spaltenname2', 'Spaltenname3') VALUES ('" & textbox1.text & "', '" & textbox2.text & "', '" & textbox3.text & "')"
    7. con.Open()
    8. reader = cmd.ExecuteReader()
    9. reader.Close()
    10. con.Close()
    sollte eig funktionieren ... oder zumindest so ähnlich

    slice schrieb:

    VB.NET-Quellcode

    1. Dim con As New SqlClient.SqlConnection
    2. Dim cmd As New SqlClient.SqlCommand
    3. Dim reader As SqlClient.SqlDataReader
    4. con.ConnectionString = "Data Source=......" 'hier deine source db ...
    5. cmd.Connection = con
    6. cmd.CommandText = "INSERT INTO gmlist ('Spaltenname1', 'Spaltenname2', 'Spaltenname3') VALUES ('" & textbox1.text & "', '" & textbox2.text & "', '" & textbox3.text & "')"
    7. con.Open()
    8. reader = cmd.ExecuteReader()
    9. reader.Close()
    10. con.Close()
    sollte eig funktionieren ... oder zumindest so ähnlich

    Und wo genau muss ich das dann einfügen?
    Beim Button?
    So..für meinen Gameserver einen Account erstellen ist mit meinem Onlineformular (PHP) folgender Code:

    PHP-Quellcode

    1. $sql = "INSERT INTO account SET login = '".$username."', password = PASSWORD('".$password."'), real_name = '".$rl_name."', email = '".$email."'";


    Ist dann dieser Code in VB (Habs um den Charakter Löschcode (social_id) erweitert) richtig:

    VB.NET-Quellcode

    1. Dim con As New SqlClient.SqlConnection
    2. Dim cmd As New SqlClient.SqlCommand
    3. Dim reader As SqlClient.SqlDataReader
    4. con.ConnectionString = "Persist Security Info=False;database=(DATENBANKNAME);server=(SERVERNAME);user id=(BENUTZER);Password=(PASSWORT);charset=latin1" 'hier deine source db ...
    5. cmd.Connection = con
    6. cmd.CommandText = "INSERT INTO account SET login = '" & textbox1.text & "', password = PASSWORD('" & textbox2.text & "'), real_name = '" & textbox3.text & "', email = '" & textbox4.text & "', social_id = '" & textbox5.text & "'"
    7. con.Open()
    8. reader = cmd.ExecuteReader()
    9. reader.Close()
    10. con.Close()
    i würds anders machen ...

    VB.NET-Quellcode

    1. cmd.CommandText = "INSERT INTO account('login', 'password', 'real_name', 'email', 'social_id') VALUES ('" & textbox1.text & "', PASSWORD('" & textbox2.text & "'), '" & textbox3.text & "', '" & textbox4.text & "', '" & textbox5.text & "')"

    ps: aber das ist geschmackssache ... i würde halt eher eine struktur beibehalten statt ständig zu wechseln

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slice“ ()

    Hmm. Da hat man auch irgendwie nen besseren überblick. Werd ich wohl so machen.
    Aber vorher tritt ein Fehler auf. Also ich Debugge & bin auch im Programm drinne &nd so.
    Wenn ich dann auf den "Erstellen"-Button klicke, kommt folgender Fehler:
    {"Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes Provider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)"}

    Der Server MUSS aber theoretisch erreichbar sein. Das gleiche kam nemlich auch bei der MySQL-Datenbank von meinem Paid-Webspace.
    Das ist jetzt ne DB von db4free.net
    hast du dort bei "Allow access from following IP **:" ein % genutzt? so das verbindungen von jeder adresse aus zugelassen werden?
    hast du mal versucht mit einem db-client wie Navicat auf die db zuzugreifen? und hast du die daten richtig eingegeben bei "con.ConnectionString"?
    Ja..ich hab da ein % genutzt.
    Mit Navicat connecten..versuch ich gleich mal.
    con.ConnectionString:

    VB.NET-Quellcode

    1. con.ConnectionString = "Persist Security Info=False;database=d0102d26;server=db4free.net;user id=d0102d26;Password=DasGewähltePW"


    Edit: Connecten funktioniert..Hab die Daten ausm VB-Code kopiert. Also müsste es theoretisch klappen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Milchschokolade“ ()

    hm strange ... versuch ma folgendes:

    VB.NET-Quellcode

    1. con.ConnectionString = "Persist Security Info=false;Integrated Security=false;Database=d0102d26;server=tcp:db4free.net, 3306;User ID =d0102d26;Password=DasGewähltePW"

    ggf noch den port ändern (3306) ...
    jo liegt an der port angabe -.-" iwie stört der sich daran ... i weiß au nich warum lt doku wäre das richtig aber er mags einfach nicht xD
    versuchs erstmal ohne port angabe ... so geht aber nur der standard port 3306 ... i weiß nich warum der den parameter nich fressen will

    VB.NET-Quellcode

    1. con.ConnectionString = "Persist Security Info=false;Integrated Security=false;Database=d0102d26;server=tcp:db4free.net;User ID =d0102d26;Password=DasGewähltePW"

    slice schrieb:

    so geht aber nur der standard port 3306

    Ist bei mir nicht schlümm.
    db4free.net benutzt den Standard Port (3306)

    €: Langsam wirds dann doch nervig ;D
    {"Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: TCP Provider, error: 0 - Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.)"}

    €²: Lag es eventuell dadran, das ich nebenbei etwas hochgeladen hab?^^
    €³: Noe..ohne Upload ist es genauso

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Milchschokolade“ ()

    hm könnte möglich sein, muss aber nicht ... isn time out weil der server nicht innerhalb x sec geantwortet hat
    €dit: magst mir ma das pass für db4free per pn schicken? keine lust mich da jetzt anzumelden ums zu testen
    dat ding will mich trollen xD phu ... joa gute frage warum dat nu nich klappt -.-" da bin ich nun auch überfragt, sry ...
    aber so öhm als ausweg ... ich pers. würde das sowieso über n umweg machen weils sicherer ist wenn mans richtig anstellt ...
    n client der die infos an php-script schickt was die daten dann in die db schreibt ... als bsp:
    [VB 2010] MySQL verbinden/bearbeiten/auslesen/warten *Greenhorn* <- post 13

    ... vll wäre das ja noch was für dich

    sorry das ich auf dem jetztigen weg nicht weiterhelfen kann

    ps: bin jetzt erstma paar min afk nicht wundern wenn nicht direkt ne antwort kommt
    ok als bsp was n wenig anders läuft als der link den i gepostet hab ^^ du hast die daten 'login', 'password', 'real_name', 'email' und 'social_id' ...
    erstellst ne funktion in vb zum senden der daten ...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Private Shared gateway As String = "http://url-zur.php/file.php"
    3. ' some other code
    4. Public Shared Function create_account(ByVal login As String, _
    5. ByVal password As String, _
    6. ByVal real_name As String, _
    7. ByVal email As String, _
    8. ByVal social_id As String)
    9. Dim postdata As String
    10. Dim request As HttpWebRequest
    11. Dim response As HttpWebResponse
    12. Dim str, str2 As IO.Stream
    13. Dim buffer As String
    14. Dim data As Byte()
    15. ' insert username, pass etc in postdata and convert this in bytes
    16. postdata = "username=" & login & "&password=" & password & "&real_name=" & real_name & "&email=" & email & "&social_id=" & social_id
    17. data = System.Text.Encoding.ASCII.GetBytes(postdata)
    18. ' create the http-request
    19. request = CType(WebRequest.Create(gateway), HttpWebRequest)
    20. ' some general settings
    21. request.Method = "POST"
    22. request.ContentType = "application/x-www-form-urlencoded"
    23. request.ContentLength = data.Length
    24. ' do the request
    25. str2 = request.GetRequestStream()
    26. str2.Write(data, 0, data.Length)
    27. str2.Close()
    28. ' get the returned source
    29. response = request.GetResponse
    30. str = response.GetResponseStream()
    31. buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd
    32. Return buffer
    33. End Function

    rufst du die funktion nu auf mit den parametern sendet das die daten an die adresse die in der var "gateway" definiert ist ... dort ist deine php datei die die daten in die db einfügt
    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. /**
    3. * @author slice
    4. */
    5. $login = $_POST['login'];
    6. $password = $_POST['password'];
    7. $real_name = $_POST['real_name'];
    8. $email = $_POST['email'];
    9. $social_id = $_POST['social_id'];
    10. $host = "ip vom db-server";
    11. $user = "datenbank-user";
    12. $pwd = "datenbank-passwort";
    13. $db = "datenbank";
    14. function create_account($f_login, $f_password, $f_real_name, $f_email, $f_social_id)
    15. {
    16. mysql_connect($host, $user, $pwd) or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    17. mysql_select_db($db) or die ("Die Datenbank existiert nicht.");
    18. $sql = "INSERT INTO account('login', 'password', 'real_name', 'email', 'social_id') VALUES ('".$f_login."', PASSWORD('".$f_password."'), '".$f_real_name."', '".$f_email."', '".$f_social_id."')";
    19. $result = mysql_query($sql);
    20. if($result)
    21. {
    22. return "true";
    23. }
    24. else
    25. {
    26. return mysql_error();
    27. }
    28. }
    29. echo create_account($login, $password, $real_name, $email, $social_id);
    30. ?>
    so rufst du nun die vb-funktion in deinem programm auf sendet es die daten an die php file, die vb funktion gibt dir als wert entweder ein true (erfolgreiches eintragen) oder den mysql fehler (sollte das eintragen fehlerhaft gewesen sein) zurück

    ps: ohne gewähr das es auf anhieb funktioniert ^^ habs nich getestet
    Ok. Ich teste das morgen oder später mal.
    Danke aufjedenfall schonmal^^

    €dit: Ich bekomms nichmal hin, den VB-Code einzufügen.
    Mein aktuelles Codegerüst sieht so aus:

    VB.NET-Quellcode

    1. Imports System.Net
    2. Public Class Form2
    3. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    4. End Sub
    5. End Class

    Also das mitm Import hab ich ja noch hinbekommen..aber wo soll jetzt der Rest hin?
    Button5 ist der Erstellen-Button

    €²: Die PHP ist kein Problem^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Milchschokolade“ ()

    Milchschokolade schrieb:

    ...

    VB.NET-Quellcode

    1. Imports System.Net
    2. Public Class Form2
    3. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    4. Dim ca_result as String
    5. ca_result = create_account("wert1", "wert2", "wert3", "wert4", "wert5")
    6. End Sub
    7. Public Shared Function create_account(ByVal login As String, _
    8. ByVal password As String, _
    9. ByVal real_name As String, _
    10. ByVal email As String, _
    11. ByVal social_id As String)
    12. ' hier der restliche code...
    13. End Function
    14. End Class


    so in etwa ^^

    €dit: ggf noch das "Public Shared" anpassen ^^ eig sollte "Private Function ..." reichen