上一篇
C怎样操作数据库才能提升效率?实战案例解析!
- 行业动态
- 2025-05-12
- 6
C#通过ADO.NET或Entity Framework实现数据库操作,支持SQL Server、MySQL等主流数据库,示例涵盖连接配置、增删改查及事务处理,结合数据验证与异常处理机制,帮助开发者高效管理数据交互逻辑,提升应用稳定性和扩展性。
基础数据连接与操作
使用ADO.NET连接数据库
using System.Data.SqlClient; string connectionString = "Server=.;Database=DemoDB;Integrated Security=True;"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); string query = "SELECT * FROM Products WHERE Price > @Price"; SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@Price", 100); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine($"产品:{reader["Name"]}, 价格:{reader["Price"]}"); } } } catch (Exception ex) { Console.WriteLine($"数据库错误:{ex.Message}"); } }
关键点:
- 使用
SqlParameter
防止SQL注入攻击 using
语句自动释放非托管资源- 异常处理保障程序稳定性
使用Entity Framework Core实现ORM
定义数据模型与DbContext
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } public class AppDbContext : DbContext { public DbSet<Product> Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=.;Database=EFDemo;Trusted_Connection=True;"); } }
执行CRUD操作
// 插入数据 using (var context = new AppDbContext()) { var newProduct = new Product { Name = "无线耳机", Price = 299 }; context.Products.Add(newProduct); context.SaveChanges(); } // 查询数据 var expensiveProducts = context.Products .Where(p => p.Price > 200) .OrderByDescending(p => p.Price) .ToList();
优势:
- LINQ查询提供强类型支持
- 自动跟踪实体状态变化
- 支持迁移和数据库版本控制
高级应用场景
事务管理
using (var transaction = context.Database.BeginTransaction()) { try { context.Products.Add(new Product { Name = "智能手表", Price = 599 }); context.Orders.Add(new Order { CustomerId = 1 }); context.SaveChanges(); transaction.Commit(); } catch { transaction.Rollback(); throw; } }
异步编程优化
public async Task<List<Product>> GetProductsAsync(decimal minPrice) { return await context.Products .Where(p => p.Price >= minPrice) .AsNoTracking() .ToListAsync(); }
安全与性能最佳实践
连接池管理
- 默认连接池大小100,通过
Max Pool Size
调整 - 避免频繁开闭连接
- 默认连接池大小100,通过
防御式编程
if (string.IsNullOrWhiteSpace(searchKeyword)) { throw new ArgumentException("搜索关键词不能为空"); }
查询优化技巧
- 使用
.AsNoTracking()
禁止变更跟踪 - 优先选择
ExecuteUpdate
/ExecuteDelete
批量操作 - 通过
SQL Server Profiler
分析慢查询
- 使用
配置管理
// appsettings.json { "ConnectionStrings": { "Default": "Server=.;Database=ProdDB;Encrypt=True;TrustServerCertificate=True" } }
引用说明
- Microsoft ADO.NET文档:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/
- EF Core官方指南:https://learn.microsoft.com/zh-cn/ef/core/
- OWASP SQL注入防护:https://owasp.org/www-community/attacks/SQL_Injection
数据验证、错误日志记录和定期安全审计应作为标准开发流程的一部分,建议使用Dapper处理高频简单查询,结合EF Core实现复杂业务逻辑,根据场景选择最合适的工具。