在C# WPF应用程序中,与数据库进行交互是一项常见且关键的任务。这通常涉及到执行增删改查(CRUD)操作。以下是三种在WPF中实现数据库CRUD操作的常见方式:使用ADO.NET、Entity Framework Core和Dapper。每种方式都有其特定的使用场景和优缺点。
1. 使用ADO.NET
代码示例:
using System.Data.SqlClient;
public class DatabaseOperations
{
private string connectionString = "your_connection_string";
public void InsertData(string data)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "INSERT INTO YourTable (Column) VALUES (@data)";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@data", data);
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
public void UpdateData(int id, string data)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "UPDATE YourTable SET Column = @data WHERE Id = @id";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@data", data);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
public void DeleteData(int id)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "DELETE FROM YourTable WHERE Id = @id";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
public DataTable GetData()
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "SELECT * FROM YourTable";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
}
return dt;
}
}
优点:
直接使用原生SQL语句,灵活且控制力强。
适合复杂的查询和数据库操作。
缺点:
代码冗长,需要手动编写SQL语句。
容易出现SQL注入安全风险。
使用场景:
当需要对数据库进行细粒度控制时。
当需要执行复杂的SQL操作时。
2. 使用Entity Framework Core
代码示例:
using Microsoft.EntityFrameworkCore;
public class YourDbContext : DbContext
{
public DbSet<YourEntity> YourEntities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer("your_connection_string");
}
public class DatabaseOperations
{
private readonly YourDbContext _context;
public DatabaseOperations(YourDbContext context)
{
_context = context;
}
public void InsertData(YourEntity entity)
{
_context.YourEntities.Add(entity);
_context.SaveChanges();
}
public void UpdateData(YourEntity entity)
{
_context.YourEntities.Update(entity);
_context.SaveChanges();
}
public void DeleteData(int id)
{
var entity = _context.YourEntities.Find(id);
if (entity != null)
{
_context.YourEntities.Remove(entity);
_context.SaveChanges();
}
}
public List<YourEntity> GetData()
{
return _context.YourEntities.ToList();
}
}
优点:
简化了数据模型和数据库之间的映射。
减少了编写的代码量,提高了开发效率。
提供了强大的LINQ查询支持。
缺点:
学习曲线相对较陡,需要理解ORM的工作原理。
在某些情况下,性能可能不如直接使用ADO.NET。
使用场景:
当项目需要快速开发且数据模型相对简单时。
当需要利用LINQ进行复杂查询时。
3. 使用Dapper
代码示例:
using System.Data.SqlClient;
using Dapper;
public class DatabaseOperations
{
private string connectionString = "your_connection_string";
public void InsertData(YourEntity entity)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "INSERT INTO YourTable (Column) VALUES (@Property)";
conn.Execute(query, entity);
}
}
public void UpdateData(YourEntity entity)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "UPDATE YourTable SET Column = @Property WHERE Id = @Id";
conn.Execute(query, entity);
}
}
public void DeleteData(int id)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "DELETE FROM YourTable WHERE Id = @Id";
conn.Execute(query, new { Id = id });
}
}
public List<YourEntity> GetData()
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "SELECT * FROM YourTable";
return conn.Query<YourEntity>(query).ToList();
}
}
}
优点:
性能优越,介于ADO.NET和Entity Framework Core之间。
简洁的API,易于使用。
支持原生SQL查询。
缺点:
需要安装Dapper库。
相对于Entity Framework Core,缺少了一些高级特性。
使用场景:
当需要高性能且简洁的数据库操作时。
当需要执行原生SQL查询且不想使用Entity Framework Core时。
总结
在C# WPF应用程序中,有多种方式可以实现数据库的增删改查操作。ADO.NET提供了最基础的数据库操作能力,但需要编写更多的代码;Entity Framework Core是一个ORM框架,可以简化数据模型和数据库之间的映射,提高开发效率;Dapper则提供了一种介于两者之间的解决方案,它提供了高性能的数据库操作能力,同时保持了代码的简洁性。开发者应根据项目需求、性能考虑和个人偏好,选择最合适的数据访问技术。