4
0

Program.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore;
  6. using Microsoft.AspNetCore.Builder;
  7. using Microsoft.AspNetCore.Hosting;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.AspNetCore.Routing;
  10. using Microsoft.Extensions.Primitives;
  11. using MySql.Data;
  12. using MySql.Data.MySqlClient;
  13. class Program
  14. {
  15. public static void Main(string[] args) => WebHost.CreateDefaultBuilder(args)
  16. .Configure(async app =>
  17. {
  18. app.UseRouting();
  19. string password = File.ReadAllText("/run/secrets/db-password");
  20. string connectionString = $"server=db;user=root;database=example;port=3306;password={password}";
  21. app.UseEndpoints(e =>
  22. {
  23. e.MapGet("/", context => {
  24. using MySqlConnection connection = new MySqlConnection(connectionString);
  25. var titles = new List<string>();
  26. try
  27. {
  28. Console.WriteLine("Connecting to MySQL...");
  29. connection.Open();
  30. string sql = "SELECT title FROM blog";
  31. using var cmd = new MySqlCommand(sql, connection);
  32. using MySqlDataReader reader = cmd.ExecuteReader();
  33. while (reader.Read())
  34. {
  35. titles.Add(reader.GetString(0));
  36. }
  37. reader.Close();
  38. }
  39. catch (Exception ex)
  40. {
  41. Console.WriteLine(ex.ToString());
  42. context.Response.StatusCode = 500;
  43. return Task.CompletedTask;
  44. }
  45. connection.Close();
  46. context.Response.StatusCode = 200;
  47. context.Response.WriteAsJsonAsync(titles);
  48. return Task.CompletedTask;
  49. });
  50. });
  51. Prepare(connectionString);
  52. }).Build().Run();
  53. private static void Prepare(string connectionString)
  54. {
  55. using MySqlConnection connection = new MySqlConnection(connectionString);
  56. connection.Open();
  57. using var transation = connection.BeginTransaction();
  58. using MySqlCommand cmd1 = new MySqlCommand("DROP TABLE IF EXISTS blog", connection, transation);
  59. cmd1.ExecuteNonQuery();
  60. 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);
  61. cmd2.ExecuteNonQuery();
  62. for (int i = 0; i < 5; i++)
  63. {
  64. using MySqlCommand insertCommand = new MySqlCommand( $"INSERT INTO blog (title) VALUES ('Blog post #{i}');", connection, transation);
  65. insertCommand.ExecuteNonQuery();
  66. }
  67. transation.Commit();
  68. connection.Close();
  69. }
  70. }