在.NET应用程序中,访问SQL Server通常使用 ADO.NET 或 Entity 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.config
或 web.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
-
安装 Entity Framework NuGet包:
Install-Package EntityFramework
-
配置连接字符串:
与ADO.NET类似,在
app.config
或web.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#类生成数据库表。以下是一个简单的示例:
-
定义实体类:
public class Employee { public int EmployeeID { get; set; } public string Name { get; set; } public int DepartmentID { get; set; } }
-
创建 DbContext:
using System.Data.Entity; public class MyDbContext : DbContext { public MyDbContext() : base("name=MyDbContext") { } public DbSet<Employee> Employees { get; set; } }
-
迁移和更新数据库:
使用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,以实现最佳的开发效果。