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

如何用C高效访问数据库?

C#可通过ADO.NET、Entity Framework等工具访问数据库,ADO.NET提供基础类库执行SQL命令及操作数据;Entity Framework实现对象关系映射,简化数据交互,两者均支持SQL Server、MySQL等常见数据库,开发时需注意连接管理、参数化查询以保障安全与性能。

基础技术:ADO.NET

ADO.NET是C#访问数据库的传统方式,具备高性能和灵活性的特点。

连接数据库

使用SqlConnection类建立连接,需配置连接字符串,示例代码:

string connectionString = "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // 执行数据库操作
}
  • 关键点using语句确保资源释放,避免内存泄漏。

执行SQL命令

通过SqlCommand执行查询或存储过程:

string sql = "SELECT * FROM Users WHERE Age > @Age";
using (SqlCommand command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@Age", 18);
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine(reader["Name"]);
        }
    }
}
  • 安全性:务必使用参数化查询,防止SQL注入攻击。

事务处理

通过SqlTransaction保证数据一致性:

using (SqlTransaction transaction = connection.BeginTransaction())
{
    try
    {
        SqlCommand cmd1 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 100 WHERE Id = 1", connection, transaction);
        SqlCommand cmd2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 100 WHERE Id = 2", connection, transaction);
        cmd1.ExecuteNonQuery();
        cmd2.ExecuteNonQuery();
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
    }
}

高效开发:Entity Framework Core

Entity Framework(EF)是微软推出的ORM框架,简化数据库操作。

定义数据模型

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=myServer;Database=myDB;User Id=myUser;Password=myPass;");
    }
}

增删改查操作

using (var context = new AppDbContext())
{
    // 查询
    var users = context.Users.Where(u => u.Age > 18).ToList();
    // 新增
    context.Users.Add(new User { Name = "Alice", Age = 25 });
    context.SaveChanges();
    // 更新
    var user = context.Users.Find(1);
    user.Name = "Bob";
    context.SaveChanges();
    // 删除
    context.Users.Remove(user);
    context.SaveChanges();
}

数据库迁移

通过EF Core命令行工具实现数据库结构版本控制:

dotnet ef migrations add InitialCreate
dotnet ef database update

安全与性能优化

防御安全威胁

  • SQL注入:始终使用参数化查询或ORM框架。
  • 连接泄露:确保及时关闭数据库连接。

提升性能

  • 连接池:默认启用,避免频繁创建/销毁连接。
  • 异步操作:使用async/await提高吞吐量。
    public async Task<List<User>> GetUsersAsync()
    {
      using (var context = new AppDbContext())
      {
          return await context.Users.Where(u => u.Age > 18).ToListAsync();
      }
    }

技术选型建议

  • 小型项目或高性能场景:选择ADO.NET,直接控制SQL语句。
  • 中大型项目或快速开发:优先使用Entity Framework Core,减少重复代码。

参考资料

  1. Microsoft ADO.NET官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/
  2. Entity Framework Core指南:https://learn.microsoft.com/zh-cn/ef/core/
  3. SQL注入防御规范:OWASP SQL Injection Prevention Cheat Sheet
0