C# WPF中实现数据库增删改查的三种方式

科技   2024-09-10 07:46   上海  

在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则提供了一种介于两者之间的解决方案,它提供了高性能的数据库操作能力,同时保持了代码的简洁性。开发者应根据项目需求、性能考虑和个人偏好,选择最合适的数据访问技术。

往期精品推荐:

在国内默默无闻的.NET,在国外火的超乎想象?

C#的膨胀之路:创新还是灭亡

介绍.NET 6款好看的winform开源UI库

介绍一款最受欢迎的.NET 开源UI库

WPF第三方开源UI框架:打造独特体验的魔法师

WPF与Winform,你的选择是?

WinForm的前世今生

.NET成年了,然后呢?——编程界的逆袭传奇

CSharp编程大全
C#编程.net core开发,winform桌面开发,wpf开发,c sharp编程大全,CSharp程序开发,C#开发实例(附源代码),编程过程遇到的各种坑详解!
 最新文章