一些使用 `DataSet` 的示例方法

在现有代码的基础上,您可以添加一些使用 `DataSet` 的方法,作为 `LocalDataAccess` 类的 helper 方法。 `DataSet` 是一种适用于离线数据处理的对象,可以存储多个 `DataTable`,以及表之间的关系。下面是几个示例方法,展示如何使用 `DataSet`。

csharp
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zhaoxi.BMS.Entity;

namespace Zhaoxi.BMS.DAL
{
    public class LocalDataAccess
    {
        // 创建连接
        SQLiteConnection conn = null;
        // 准备操作对象
        SQLiteCommand comm = null;
        // 数据适配器
        SQLiteDataAdapter adapter = null;
        // 事务管理
        SQLiteTransaction trans = null;

        private void Dispose()
        {
            if (trans != null)
            {
                trans.Dispose();
                trans = null;
            }
            if (adapter != null)
            {
                adapter.Dispose();
                adapter = null;
            }
            if (comm != null)
            {
                comm.Dispose();
                comm = null;
            }
            if (conn != null)
            {
                if (conn.State == System.Data.ConnectionState.Open)
                    conn.Close();
                conn.Dispose();
                conn = null;
            }
        }

        private void Connection()
        {
            if (conn == null)
                conn = new SQLiteConnection("data source=data.db");// Sqlite的连接字符串
                                                                   // 其他数据库连接字符串不一样

            if (conn.State != System.Data.ConnectionState.Open)
                conn.Open();
        }

        private DataTable GetData(string sql)
        {
            try
            {
                this.Connection();

                adapter = new SQLiteDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                adapter.Fill(dt);

                return dt;
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                this.Dispose();
            }
        }

        public DataTable GetBatteryGroup()
        {
            return GetData("select * from b_group");
        }

        public int SaveValues(List<ValueEntity> ves)
        {
            string sql = "insert into \"main\".\"values\"(value_name,value) values(\"{0}\",\"{1}\")";
            this.Connection();
            trans = conn.BeginTransaction();
            int count = 0;
            for (int i = 0; i < ves.Count; i++)
            {
                comm = new SQLiteCommand(string.Format(sql, ves[i].Name, ves[i].Value), conn);
                count += comm.ExecuteNonQuery();
            }
            if (count == ves.Count)
            {
                trans.Commit();
            }
            else
            {
                trans.Rollback();
            }
            return count;
        }

        // 以下是与DataSet相关的Helper方法

        // 获取多个表数据并存入DataSet
        public DataSet GetMultipleTablesData()
        {
            DataSet ds = new DataSet();
            try
            {
                this.Connection();

                // 第一个表的数据
                string sql1 = "select * from b_group";
                adapter = new SQLiteDataAdapter(sql1, conn);
                adapter.Fill(ds, "BatteryGroup");

                // 第二个表的数据
                string sql2 = "select * from values";
                adapter = new SQLiteDataAdapter(sql2, conn);
                adapter.Fill(ds, "Values");

                return ds;
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                this.Dispose();
            }
        }

        // 使用DataSet和DataAdapter更新数据库
        public void UpdateValuesUsingDataSet(DataSet ds)
        {
            try
            {
                this.Connection();
                string sql = "select * from values";
                adapter = new SQLiteDataAdapter(sql, conn);

                SQLiteCommandBuilder cmdBuilder = new SQLiteCommandBuilder(adapter);

                // 更新数据
                adapter.Update(ds, "Values");
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                this.Dispose();
            }
        }

        // 获取某个表的DataSet
        public DataSet GetTableDataSet(string tableName)
        {
            DataSet ds = new DataSet();
            try
            {
                this.Connection();
                string sql = $"select * from {tableName}";
                adapter = new SQLiteDataAdapter(sql, conn);
                adapter.Fill(ds, tableName);
                return ds;
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                this.Dispose();
            }
        }
    }
}
 

### 说明
1. `GetMultipleTablesData` 方法:
    - 这个方法从数据库中获取多个表的数据,并将其存储在一个 `DataSet` 对象中。每个表的数据保存在 `DataSet` 的不同 `DataTable` 中。
    
2. `UpdateValuesUsingDataSet` 方法:
    - 这个方法演示了如何使用 `DataSet` 和 `DataAdapter` 更新数据库的数据。该方法使用 `SQLiteCommandBuilder` 自动生成 `INSERT`、`UPDATE` 和 `DELETE` 命令,并将 `DataSet` 中的更改提交到数据库。

3. `GetTableDataSet` 方法:
    - 这个方法从数据库中获取指定表的数据,并将其存储在一个 `DataSet` 对象中。此方法便于获取单个表的数据并进行离线操作。

这些方法展示了如何使用 `DataSet` 和 `DataAdapter` 在离线模式下处理数据,这对于某些需要批量处理数据的场景非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值