Program.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using MySqlConnector;
  2. var builder = WebApplication.CreateBuilder(args);
  3. string password = File.ReadAllText("/run/secrets/db-password");
  4. string connectionString = $"server=db;user=root;database=example;port=3306;password={password}";
  5. builder.Services.AddTransient<MySqlConnection>((_provider) => new MySqlConnection(connectionString));
  6. var app = builder.Build();
  7. app.MapGet("/", (MySqlConnection connection) => {
  8. var titles = new List<string>();
  9. try
  10. {
  11. Console.WriteLine("Connecting to MySQL...");
  12. connection.Open();
  13. string sql = "SELECT title FROM blog";
  14. using var cmd = new MySqlCommand(sql, connection);
  15. using MySqlDataReader reader = cmd.ExecuteReader();
  16. while (reader.Read())
  17. {
  18. titles.Add(reader.GetString(0));
  19. }
  20. reader.Close();
  21. }
  22. catch (Exception ex)
  23. {
  24. return Results.Problem(detail: ex.ToString());
  25. }
  26. connection.Close();
  27. return Results.Ok(titles);
  28. });
  29. Prepare(connectionString);
  30. app.Run();
  31. void Prepare(string connectionString)
  32. {
  33. using MySqlConnection connection = new MySqlConnection(connectionString);
  34. connection.Open();
  35. using var transation = connection.BeginTransaction();
  36. using MySqlCommand cmd1 = new MySqlCommand("DROP TABLE IF EXISTS blog", connection, transation);
  37. cmd1.ExecuteNonQuery();
  38. using MySqlCommand cmd2 = new MySqlCommand("CREATE TABLE IF NOT EXISTS blog (id int NOT NULL AUTO_INCREMENT, title varchar(255), PRIMARY KEY (id))", connection, transation);
  39. cmd2.ExecuteNonQuery();
  40. for (int i = 0; i < 5; i++)
  41. {
  42. using MySqlCommand insertCommand = new MySqlCommand( $"INSERT INTO blog (title) VALUES ('Blog post #{i}');", connection, transation);
  43. insertCommand.ExecuteNonQuery();
  44. }
  45. transation.Commit();
  46. connection.Close();
  47. }