当前位置:首页 > 行业动态 > 正文

C怎样操作数据库才能提升效率?实战案例解析!

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();
}

安全与性能最佳实践

  1. 连接池管理

    • 默认连接池大小100,通过Max Pool Size调整
    • 避免频繁开闭连接
  2. 防御式编程

    if (string.IsNullOrWhiteSpace(searchKeyword))
    {
        throw new ArgumentException("搜索关键词不能为空");
    }
  3. 查询优化技巧

    • 使用.AsNoTracking()禁止变更跟踪
    • 优先选择ExecuteUpdate/ExecuteDelete批量操作
    • 通过SQL Server Profiler分析慢查询
  4. 配置管理

    // 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实现复杂业务逻辑,根据场景选择最合适的工具。

0