与.NET集成

 数据库   ZeroIsStart   2024-10-25 22:42   65

在.NET应用程序中,访问SQL Server通常使用 ADO.NETEntity Framework。这两种方式提供了不同的抽象级别和使用场景,满足了从底层数据库操作到高级ORM框架的需求。本文将详细介绍如何在.NET项目中使用ADO.NET和Entity Framework来与SQL Server进行数据交互,包括配置、常用操作示例、优缺点对比等,帮助您选择和实现适合的数据库访问方案。


1. 使用ADO.NET访问SQL Server

ADO.NET是.NET Framework提供的底层数据库访问技术,直接操作数据库,适用于需要高性能、对数据库操作细粒度控制的场景。通过ADO.NET,可以通过SQL查询直接操作SQL Server的数据库表。

1.1 配置连接字符串

app.configweb.config 中配置数据库连接字符串:

<connectionStrings>
    <add name="MyDbConnection" connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;User ID=Username;Password=Password;" providerName="System.Data.SqlClient" />
</connectionStrings>

1.2 基本操作示例

1.2.1 插入数据

using System.Data.SqlClient;

string connectionString = ConfigurationManager.ConnectionStrings["MyDbConnection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
    string query = "INSERT INTO Employees (Name, DepartmentID) VALUES (@Name, @DepartmentID)";
    SqlCommand command = new SqlCommand(query, connection);
    command.Parameters.AddWithValue("@Name", "John Doe");
    command.Parameters.AddWithValue("@DepartmentID", 1);

    connection.Open();
    int result = command.ExecuteNonQuery();
    Console.WriteLine(result > 0 ? "插入成功" : "插入失败");
}

1.2.2 查询数据

using System.Data.SqlClient;

string connectionString = ConfigurationManager.ConnectionStrings["MyDbConnection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
    string query = "SELECT EmployeeID, Name FROM Employees";
    SqlCommand command = new SqlCommand(query, connection);

    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine($"ID: {reader["EmployeeID"]}, Name: {reader["Name"]}");
        }
    }
}

1.2.3 更新和删除数据

  • 更新数据:

    string query = "UPDATE Employees SET Name = @Name WHERE EmployeeID = @EmployeeID";
    // 使用类似插入数据的方式,设置参数并调用 ExecuteNonQuery()
    
  • 删除数据:

    string query = "DELETE FROM Employees WHERE EmployeeID = @EmployeeID";
    

1.3 ADO.NET 优缺点

  • 优点:高性能、对SQL Server操作细粒度控制,适合复杂查询。
  • 缺点:需手动编写SQL语句,易于出错且代码冗长。

2. 使用Entity Framework访问SQL Server

Entity Framework (EF) 是.NET的一个对象关系映射(ORM)框架,简化了数据库操作。EF将数据库表映射为.NET类,使开发者能够通过C#代码而不是SQL查询来进行CRUD操作,适合较高抽象层次、以对象操作为主的应用程序。

2.1 配置Entity Framework

  1. 安装 Entity Framework NuGet包

    Install-Package EntityFramework
    
  2. 配置连接字符串

    与ADO.NET类似,在 app.configweb.config 中配置连接字符串:

    <connectionStrings>
        <add name="MyDbContext" connectionString="Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
    

2.2 使用Code First创建数据库

Code First允许在不定义数据库表的情况下,通过C#类生成数据库表。以下是一个简单的示例:

  1. 定义实体类

    public class Employee
    {
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public int DepartmentID { get; set; }
    }
    
  2. 创建 DbContext

    using System.Data.Entity;
    
    public class MyDbContext : DbContext
    {
        public MyDbContext() : base("name=MyDbContext") { }
    
        public DbSet<Employee> Employees { get; set; }
    }
    
  3. 迁移和更新数据库

    使用EF的迁移功能更新数据库架构:

    Enable-Migrations
    Add-Migration InitialCreate
    Update-Database
    

2.3 基本操作示例

2.3.1 插入数据

using (var context = new MyDbContext())
{
    var employee = new Employee { Name = "John Doe", DepartmentID = 1 };
    context.Employees.Add(employee);
    context.SaveChanges();
}

2.3.2 查询数据

using (var context = new MyDbContext())
{
    var employees = context.Employees.ToList();
    foreach (var employee in employees)
    {
        Console.WriteLine($"ID: {employee.EmployeeID}, Name: {employee.Name}");
    }
}

2.3.3 更新数据

using (var context = new MyDbContext())
{
    var employee = context.Employees.Find(1);
    if (employee != null)
    {
        employee.Name = "Jane Doe";
        context.SaveChanges();
    }
}

2.3.4 删除数据

using (var context = new MyDbContext())
{
    var employee = context.Employees.Find(1);
    if (employee != null)
    {
        context.Employees.Remove(employee);
        context.SaveChanges();
    }
}

2.4 Entity Framework 优缺点

  • 优点:开发效率高,减少SQL代码,易于维护和扩展,提供数据验证和关系映射等功能。
  • 缺点:相比ADO.NET性能较低,适合业务逻辑较少、对性能要求较低的场景。

3. ADO.NET与Entity Framework的对比与选择

特性 ADO.NET Entity Framework
开发效率 较低,需要手写SQL 较高,通过对象操作数据库
性能 高,适合对性能敏感的应用 较低,适合普通应用
抽象层级 底层,直接操作数据库 高层,ORM映射为对象
适用场景 复杂查询、性能关键的应用 快速开发、面向对象的应用
代码维护性 需手动管理SQL,代码可读性较低 易维护,代码结构清晰

选择建议

  • ADO.NET:适用于需要直接操作数据库,性能敏感的场景。
  • Entity Framework:适用于快速开发,对性能要求不高的面向对象的应用。

4. 总结

通过ADO.NET和Entity Framework,.NET应用程序可以方便地与SQL Server集成。ADO.NET提供了更高的性能和灵活性,而Entity Framework提供了更简洁的代码结构和更高的开发效率。在选择时,应根据项目需求和性能要求来决定使用ADO.NET还是Entity Framework,以实现最佳的开发效果。