Docker

DockerdbWPF

Starta upp en remote mysql via docker i ubuntu:



docker run -d \
  --name dev-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=hemligt-losenord \
  -e MYSQL_DATABASE=mindatabas \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

<StackPanel Margin="20">
    <Button Content="Anslut och Hämta/Skapa" 
            Click="BtnConnect_Click" 
            Padding="10" 
            FontSize="16" />

    <ListBox x:Name="PersonListBox" 
             Margin="0,20,0,0" 
             Height="200" 
             FontSize="14"/>
</StackPanel>

using System;
using System.Windows;
using MySqlConnector;

namespace WpfAppMysql
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void BtnConnect_Click(object sender, RoutedEventArgs e)
        {
            // Anslutningssträng UTAN Database-parametern till en början
            string connectionString = "Server=localhost;Port=3306;User ID=root;Password=hemligt-losenord;";

            try
            {
                await using var connection = new MySqlConnection(connectionString);
                await connection.OpenAsync();

                // 1. Skapa databasen om den saknas, och välj den
                string createDbQuery = "CREATE DATABASE IF NOT EXISTS mindatabas;";
                await using (var cmd = new MySqlCommand(createDbQuery, connection))
                    await cmd.ExecuteNonQueryAsync();

                string useDbQuery = "USE mindatabas;";
                await using (var cmd = new MySqlCommand(useDbQuery, connection))
                    await cmd.ExecuteNonQueryAsync();

                // 2. Skapa tabellen om den saknas
                string createTableQuery = @"
                    CREATE TABLE IF NOT EXISTS personer (
                        Id INT AUTO_INCREMENT PRIMARY KEY,
                        Namn VARCHAR(100) NOT NULL,
                        Alder INT NOT NULL
                    );";
                await using (var cmd = new MySqlCommand(createTableQuery, connection))
                    await cmd.ExecuteNonQueryAsync();

                // 3. Kolla om tabellen är tom. Om den är det, lägg in två personer.
                string countQuery = "SELECT COUNT(*) FROM personer;";
                await using (var cmd = new MySqlCommand(countQuery, connection))
                {
                    long count = (long)await cmd.ExecuteScalarAsync();
                    if (count == 0)
                    {
                        string insertQuery = "INSERT INTO personer (Namn, Alder) VALUES ('Stefan', 52), ('Monica', 50);";
                        await using (var insertCmd = new MySqlCommand(insertQuery, connection))
                            await insertCmd.ExecuteNonQueryAsync();
                    }
                }

                // 4. Hämta datan och visa den i gränssnittet
                PersonListBox.Items.Clear();
                string selectQuery = "SELECT Id, Namn, Alder FROM personer;";

                await using (var cmd = new MySqlCommand(selectQuery, connection))
                await using (var reader = await cmd.ExecuteReaderAsync())
                {
while (await reader.ReadAsync())
{
    int id = reader.GetInt32(0);
    string namn = reader.GetString(1);
    int alder = reader.GetInt32(2);

    PersonListBox.Items.Add($"ID: {id} | Namn: {namn} | Ålder: {alder}");
}
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ett databasfel uppstod:\n\n{ex.Message}", "Fel", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
    }
}

docker exec -it dev-mysql mysql -u root -p