如何处理sql连接和数据处理与mysql剃刀页

s5a0g9ez  于 2023-03-17  发布在  Mysql
关注(0)|答案(1)|浏览(93)

在使用剃刀页时,处理数据库连接和从表中获取数据的“正确”方法是什么?
此设置工作正常,但当站点上有很多用户时会发生什么情况?是否会出现sql连接错误?我已将AddTransient添加到管理器和sql类中,根据我的理解,AddTransient会在每次需要时创建该对象的新示例,然后再次销毁它
那么,有没有更好的方法来处理sql连接和使用razor pages进行数据处理呢?
目前我有这样的设置:
SQL数据访问

private readonly IConfiguration _config;
        MySqlConnection conn;
        MySqlCommand cmd;
        MySqlDataReader reader;
        public string ConnString { get; private set; }

        public SqlDataAccess(IConfiguration config)
        {
            _config = config;
            ConnString = _config.GetConnectionString("Default");
        }
        public List<Product> GetProducts()
        {
            try
            {
                List<Product> products = new List<Product>();
                conn = new MySqlConnection(ConnString);
                conn.Open();
                cmd = new MySqlCommand("query", conn);
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    products.Add(new Product((string)reader["PartNumber"], (string)reader["Name"], (int)reader["Stock"], (decimal)reader["Price"]));
                }
                conn.Close();
                return products;
            }
            catch (Exception)
            {
                throw new Exception();
            }
        }

产品经理

private readonly ISqlDataAccess _db;
         public ProductManager(ISqlDataAccess db)
 {
     _db = db;
 }
 public List<Product> GetProducts()
 {
     return _db.GetProducts();
 }

Program.cs

public static void Main(string[] args)
 {
     var builder = WebApplication.CreateBuilder(args);

     // Add services to the container.
     builder.Services.AddRazorPages();
     builder.Services.AddTransient<ISqlDataAccess, SqlDataAccess>();
     builder.Services.AddTransient<IProductManager, ProductManager>();
     var app = builder.Build();

     // Configure the HTTP request pipeline.
     if (!app.Environment.IsDevelopment())
     {
         app.UseExceptionHandler("/Error");
         // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
         app.UseHsts();
     }

     app.UseHttpsRedirection();
     app.UseStaticFiles();

     app.UseRouting();

     app.UseAuthorization();

     app.MapRazorPages();

     app.Run();
}
mhd8tkvw

mhd8tkvw1#

每次都关闭连接,这样就不会发生内存泄漏。事实上,连接会返回到连接池中供重用,以保存每次从新示例化连接的成本。因此,从性能的Angular 来看,您的方法没有问题。
至于管理数据访问的“更好”的方法,这是一个见仁见智的问题(我个人建议使用ORM),并且很可能会解决您的问题;- )

相关问题