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