VS2019 mysql Datenaustausch via VB-Code

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von elmsrock.

    VS2019 mysql Datenaustausch via VB-Code

    Hallo zusammen!
    Ich habe in Visual Studio 2019 "MySql for Visual Studio" und den "MySql Connector" installiert, beide in der aktuellen Version.
    Ich habe eine Verbindung zu einer Datenbank auf einem Server im lokalen Netz hergestellt (MySql 5.5.25a) und kann im Server-Explorer oder Script-Editor Daten anschauen und effektiv in der DB verändern.
    Ich habe aber keine Ahnung, wie ich das ganze mit Programmcode mache, sprich, wie ich einen SQL-Befehl wie "Insert Into ..." durch Klicken eines Buttons an die Verbindung absetze?
    Das ganze soll ohne ODBC ablaufen.

    Kann mir jemand auf die Sprünge helfen?

    Gruß, elmsrock
    Danke Erfinder,
    die habe ich auch fast alle durchgeackert, auch deins mit Connectoren.
    Hilft mir nicht weiter. Ich will doch nur alle 15 Minuten ein paar Zeilen, die ich aus einer io-Textdatei generiere, in eine MySql-Bank schreiben.
    Verbinden --> INSERT INTO ionio VALUES (1,2,3) --> FehlerReport empfangen --> Trennen
    schwebte mir da vor. So ginge das in PHP.
    Ich dachte nur, das könnte man mit VB auch direkt machen.
    Dann muss ich wohl über mysql.exe gehen. Dat Dingen läuft ja auf dem Server.
    jo, nur um ein InsertCommand abzusetzen braucht man kein Connector-Zeugs - das kriegt man auch mittm DBCommandBuilder hin.
    Aber so 5 - 10 Zeilen wird man schreiben müssen - je nachdem wie flexibel man das haben will.
    Aber wenn du mit mysql.exe besser klarkommst, dann nimm doch das (kenn ich garnet).
    Ich wußte ja und weiß immer noch nicht was ich dazu brauche. Daher habe ich nach einem Video-Beispiel die beiden Sachen erst mal installiert.
    mysql.exe ist eine Konsolenanwendung und Bestandteil der MySql-Server-Installation.
    Man kann damit SQL-Befehle direkt ausführen oder auch eine Latte davon in einer Textdatei (z.B. source.sql) ablegen und dann via
    "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe" -u [username] -p[password] --e="source [path]/source.sql"
    abklappern. Hinter -p darf dabei kein Leerzeichen stehen und der Pfad zur source.sql ist mit "Slashes not Backslashes" gepflastert, auch unter Windows.
    Ist aber halt ein externer Aufruf. Schöner wär's natürlich alles kompakt in einer EXE zu haben.
    Dann werde ich mir wohl mal DBCommandBuilder anschauen, obwohl, auf den ersten Eindruck, das wohl mehr als 10 Zeilen werden.
    Wenn es Quick'n'Dirty gehen soll, dann mach es so:
    Original

    C#-Quellcode

    1. MySqlConnectionStringBuilder connectionStringBuilder = new MySqlConnectionStringBuilder
    2. {
    3. Server = "AddressOfYourServer",
    4. Database = "YourDatabase",
    5. UserID = "YourUserId",
    6. Password = "YourPassword"
    7. };
    8. MySqlConnection mySqlConnection = new MySqlConnection(connectionStringBuilder.ToString());
    9. MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
    10. mySqlCommand.CommandText = "INSERT INTO yourtable VALUES(@Param1, @Param2, @Param3)";
    11. mySqlCommand.Parameters.AddWithValue("@Param1", "test");
    12. mySqlCommand.Parameters.AddWithValue("@Param2", "test");
    13. mySqlCommand.Parameters.AddWithValue("@Param3", "test");
    14. mySqlCommand.Transaction = mySqlConnection.BeginTransaction();
    15. try
    16. {
    17. int result = mySqlCommand.ExecuteNonQuery();
    18. mySqlCommand.Transaction.Commit();
    19. }
    20. catch (MySqlException)
    21. {
    22. mySqlCommand.Transaction.Rollback();
    23. throw;
    24. }
    25. finally
    26. {
    27. mySqlCommand.Transaction.Dispose();
    28. mySqlCommand.Dispose();
    29. mySqlConnection.Close();
    30. mySqlConnection.Dispose();
    31. }
    VB.NET via Converter

    VB.NET-Quellcode

    1. Dim connectionStringBuilder As MySqlConnectionStringBuilder = New MySqlConnectionStringBuilder With {
    2. .Server = "AddressOfYourServer",
    3. .Database = "YourDatabase",
    4. .UserID = "YourUserId",
    5. .Password = "YourPassword"
    6. }
    7. Dim mySqlConnection As MySqlConnection = New MySqlConnection(connectionStringBuilder.ToString())
    8. Dim mySqlCommand As MySqlCommand = mySqlConnection.CreateCommand()
    9. mySqlCommand.CommandText = "INSERT INTO yourtable VALUES(@Param1, @Param2, @Param3)"
    10. mySqlCommand.Parameters.AddWithValue("@Param1", "test")
    11. mySqlCommand.Parameters.AddWithValue("@Param2", "test")
    12. mySqlCommand.Parameters.AddWithValue("@Param3", "test")
    13. mySqlCommand.Transaction = mySqlConnection.BeginTransaction()
    14. Try
    15. Dim result As Integer = mySqlCommand.ExecuteNonQuery()
    16. mySqlCommand.Transaction.Commit()
    17. Catch MySqlException
    18. mySqlCommand.Transaction.Rollback()
    19. Throw
    20. Finally
    21. mySqlCommand.Transaction.Dispose()
    22. mySqlCommand.Dispose()
    23. mySqlConnection.Close()
    24. mySqlConnection.Dispose()
    25. End Try
    Das hier ist natürlich nur ein Beispiel, wie man sauber mit MySQL, bzw. auch anderen relationalen Datenbanken von Hand arbeitet. Zu beachten ist, dass dieser Aufbau nur für eine Zeile je 15 minuten gedacht ist. Bei mehreren Zeilen musst du den CommandText und die Parameter mithilfe einer Schleife erstellen.

    Vorraussetzung ist MySql.Data.dll in der Version 6.9.12
    Vielen Dank EaranMaleasi!

    Das werde ich mal ausprobieren.
    Mal sehen, ob ich damit auch den "source Textdatei"-Befehl verwenden kann, da ich ja alle INSERT-Befehle vorher in eine Text-Datei schreiben, dass, falls z.B. der Server gerade offline ist, das beim nächsten Versuch geschrieben wird. Dann bräuchte ich auch nur einen Aufruf...
    jo - für so Spezialfälle ist das eine Lösung.
    Aber hüte dich davor, diesen Weg weiterzugehen, wenn weitere Tabellen hinzukommen, und weitere Command-Typen (Select, Update, Delete).
    Dieser Ansatz wächst da exponentiell, und blitzgeschwind hast du da ein total unwartbares Code-Monster am Hacken, bei dem man sich nur an' Kopp packt.

    Besser frühzeitig einen Break machen, neu konzipieren, und nochmal nachfragen nach den Technologien, die dafür bereitstehen.
    @EaranMaleasi:
    So, heute mal geschafft, dein Beispiel zu verwenden. Nur 2 Stellen wurden bemängelt:
    Catch MySqlException muss Catch ex As MySqlException heissen und
    vor mySqlCommand.Transaction = mySqlConnection.BeginTransaction() muss noch ein mySqlConnection.Open().
    Dann ist alles wunderbar.

    Danke, elmsrock