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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我很高兴为您提供帮助。下面是使用MVVM思想、WPF实现Oracle数据库CRUD的代码: public class OracleViewModel { private OracleDataContext _db; public OracleViewModel() { _db = new OracleDataContext(); } public void Create(object obj) { _db.Create(obj); } public void Update(object obj) { _db.Update(obj); } public void Delete(object obj) { _db.Delete(obj); } public IEnumerable<object> Select() { return _db.Select(); } } ### 回答2: 在使用WPF实现Oracle数据库增删改查时,可以使用MVVM(Model-View-ViewModel)架构思想来设计代码。下面是一个简单的示例代码,帮助你了解如何使用MVVM思想完成这个功能。 Model: ```C# // 数据库连接及操作相关的代码可以在 Model 实现 public class OracleDatabaseModel { // 建立数据库连接并执行增删改查操作 public void ExecuteQuery(string query) { // 在这里实现数据库连接及相关操作 } } ``` ViewModel: ```C# public class MainViewModel : INotifyPropertyChanged { private OracleDatabaseModel _model; public MainViewModel() { _model = new OracleDatabaseModel(); } private string _query; public string Query { get { return _query; } set { _query = value; OnPropertyChanged(nameof(Query)); } } private RelayCommand _executeCommand; public RelayCommand ExecuteCommand { get { if (_executeCommand == null) { _executeCommand = new RelayCommand( () => { _model.ExecuteQuery(Query); // 执行查询后的相关操作,比如更新界面或显示结果 }, () => { // 在这里可以添加一些判断逻辑,比如查询内容是否为空,是否有权限等 return !string.IsNullOrEmpty(Query); }); } return _executeCommand; } } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } ``` View: ```XAML <!-- 在视图绑定 ViewModel 的属性和命令 --> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Query}" /> <Button Content="执行" Command="{Binding ExecuteCommand}" /> <!-- 其他 UI 元素 --> </Grid> ``` 通过上述示例,你可以在 WPF 使用 MVVM 思想来处理与 Oracle 数据库增删改查操作。注意,在实际应用,你需要根据需要进一步完善和修改上述代码。 ### 回答3: 使用MVVM思想实现WPFOracle数据库增删改查操作代码如下: 首先,在ViewModel层创建一个用于和数据库交互的类,例如命名为OracleDataService。该类包含以下几个方法: 1. 查询数据操作: ```C# public DataTable GetOracleData() { // 连接数据库 using (OracleConnection connection = new OracleConnection(connectionString)) { // 执行查询语句 string sql = "SELECT * FROM TableName"; using (OracleCommand command = new OracleCommand(sql, connection)) { connection.Open(); using (OracleDataAdapter adapter = new OracleDataAdapter(command)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable); return dataTable; } } } } ``` 2. 插入数据操作: ```C# public void InsertOracleData(DataTable dataTable) { using (OracleConnection connection = new OracleConnection(connectionString)) { // 执行插入语句 string sql = "INSERT INTO TableName (Column1, Column2) VALUES (:val1, :val2)"; using (OracleCommand command = new OracleCommand(sql, connection)) { connection.Open(); foreach (DataRow row in dataTable.Rows) { command.Parameters.Clear(); // 清除之前的参数 command.Parameters.AddWithValue(":val1", row["Column1"]); command.Parameters.AddWithValue(":val2", row["Column2"]); command.ExecuteNonQuery(); } } } } ``` 3. 更新数据操作: ```C# public void UpdateOracleData(DataTable dataTable) { using (OracleConnection connection = new OracleConnection(connectionString)) { // 执行更新语句 string sql = "UPDATE TableName SET Column1 = :val1, Column2 = :val2 WHERE ID = :id"; using (OracleCommand command = new OracleCommand(sql, connection)) { connection.Open(); foreach (DataRow row in dataTable.Rows) { command.Parameters.Clear(); // 清除之前的参数 command.Parameters.AddWithValue(":val1", row["Column1"]); command.Parameters.AddWithValue(":val2", row["Column2"]); command.Parameters.AddWithValue(":id", row["ID"]); command.ExecuteNonQuery(); } } } } ``` 4. 删除数据操作: ```C# public void DeleteOracleData(DataTable dataTable) { using (OracleConnection connection = new OracleConnection(connectionString)) { // 执行删除语句 string sql = "DELETE FROM TableName WHERE ID = :id"; using (OracleCommand command = new OracleCommand(sql, connection)) { connection.Open(); foreach (DataRow row in dataTable.Rows) { command.Parameters.Clear(); // 清除之前的参数 command.Parameters.AddWithValue(":id", row["ID"]); command.ExecuteNonQuery(); } } } } ``` 在WPF的View层,可以使用DataGrid控件来展示数据库的数据,并绑定ViewModel对应的属性,以实现数据的展示和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值