CYQ.Data V5 批量插入与批量更新示例

简介:

最近有网友问了我 CYQ.Data 要怎么实现批量修改,于是我就花了点时间给写了以下的示例:

 

 
示例为Winform应用,现实对DataGridView控件单元格的内容后,可以实现自动更新到数据库。

 

 
先上最终结果图:
 
 
 

接下上一张项目解决方案图:

 
 
 

由于是写Demo,所以我一般都选择用文本数据库做为示例。

 
 

我新建了一个Users.ts,内容为:

 
ID,int;
UserName,string;
CreateTime,datetime;
 
 

意思就是表名为“Users”,字段为“ID,UserName,CreateTime”。

 

 
PS:文本数据库,可用CodeFirst实体类方式,也可以直接用传统枚举型方式,以前的文章都是用CodeFirst模式演示,这里就有了枚举型演示。

 

对应的标准型枚举文件TableNames.cs内容为:

 
复制代码
    /// <summary>
    /// TableNames 的摘要说明
    /// </summary>
    public enum TableNames
    {
       Users,
    }
    public enum Users
    {
        ID, UserName, CreateTime
    }
复制代码
 
 

由于只是示例,可以用V5自带的工具生成,也可以自己新建手写了。

 
 
 

接下来先看一下部分代码:

 

 
首先定义一个全局的MDataTable字段:
 
 public MDataTable table;
 
 

接下来写个Load函数,页面加载时显示下数据,然后绑定到列表控件:

 
复制代码
        private void LoadData()
        {
            using (MAction action = new MAction(TableNames.Users))
            {
                table = action.Select();
                table.Bind(gvUsers);
            }
        }
复制代码
 
 

FormLoad的代码:

 
复制代码
        private void Form1_Load(object sender, EventArgs e)
        {
            LoadData();
            if (table.Rows.Count < 100)
            {
                //批量添加数据。
                //给table批量添加行。
                MDataRow row = null;
                for (int i = 0; i < 100; i++)
                {
                    row = table.NewRow();
                    row.Set(Users.UserName, "User:" + DateTime.Now.Millisecond);
                    row.Set(Users.CreateTime, DateTime.Now);
                    table.Rows.Add(row);
                }
                //调用表的批量添加。
                table.AcceptChanges(AcceptOp.Insert);
                //重新绑定到控件。
                table.Bind(gvUsers);
            }
        }
复制代码
 
 

先绑定数据,这样table就不为Null了,如果一开始没数据,table也是有数据结构的。

 
判断如果数据少于100行,下面的几行代码就是批量插入了,然后重新绑定到控件。
 
 

如何进行量更新呢?

 
复制代码
 private void gvUsers_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            
            if (table.AcceptChanges(AcceptOp.Update))
            {
                index++;
                labTip.Text = "数据已更新到数据库..." + index;
            }
            else
            {
                labTip.Text = "数据更新失败";
            }
        }
复制代码
 
 

方法很简单,只要处理单元格的列值改变状态就调用一下就可以了。

 
当然了了,由于是批量,你也可以把代码放到一个按钮里去,通过按钮点击再去确定指更新。

 

 
理论上,指量更新就到这里为止了,这里再补一点内容,就是列的中文显示:
 
通常我们查询后,列名都是英文的,但是系统多数是显示中文的,这里给出一种解决方案:
 
        private void gvUsers_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            FieldKeyValue.FormatHeaderText(gvUsers);
        }
 
 

我们在控件的DataBindingComplete事件里,翻译一下列头就可以了。

 
这里我把它封装到一个FieldKeyValue类里,代码如下:
 
复制代码
public class FieldKeyValue
    {
        public static void FormatHeaderText(DataGridView gv)
        {
            for (int i = 0; i < gv.Columns.Count; i++)
            {
                gv.Columns[i].HeaderText = GetName(gv.Columns[i].HeaderText);
            }

        }
        public static string GetName(string key)
        {
            return GetName(key, null);
        }
        public static string GetName(string key, string tableName)
        {
            Dictionary<string, string> dictionary = GetFieldDescriptionDictionary();
 
            if (dictionary != null)
            {
                if (tableName != null && dictionary.ContainsKey(tableName + "_" + key))
                {
                    return dictionary[tableName + "_" + key];
                }
                else if (dictionary.ContainsKey(key))
                {
                    return dictionary[key];
                }
            }
            return key;
        }
        private static Dictionary<string, string> _Dic = null;
        private static Dictionary<string, string> GetFieldDescriptionDictionary()
        {
            if (_Dic == null)
            {
                _Dic = new Dictionary<string, string>();
                #region 字典添加
 
                _Dic.Add("ID", "编号");
                _Dic.Add("UserName", "用户名");
                _Dic.Add("CreateTime", "创建日期");
 
                #endregion
            }
            return _Dic;
        }
复制代码
 
 

只要添加字典对应关系就可以了,由于有时候不同的表名,相同字段可能有不同的翻译,所以字典是支持:

 
 _Dic.Add("TableA_ID", "编号");
 _Dic.Add("TableB_ID", "标识");
 
 

该类会优先判断查询“表名_字段名”,如果找不到才找“字段名”。

 

 
最后提供Demo项目源码下载:  CYQ.Data_V5_Test_Win.rar
 
 

对于Winform的分页,可以下载我的Winform分页控件:C#Winform通用分页控件实战篇(提供源码下载)


版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2013/05/22/3092609.html

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
1月前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
154 0
|
3月前
|
SQL 关系型数据库 MySQL
『 MySQL数据库 』CRUD之UD,表的数据更新(修改)及删除
『 MySQL数据库 』CRUD之UD,表的数据更新(修改)及删除
|
7月前
数据更新语句INSERT语句、UPDATE语句、DELETE语句等,用于向数据表中插入、更新或删除数据。示例
数据更新语句INSERT语句、UPDATE语句、DELETE语句等,用于向数据表中插入、更新或删除数据。示例
55 1
|
9月前
|
SQL Java 数据库
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(一)
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(一)
126 0
|
9月前
|
Java Spring
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(二)
spring boot CRUD(查询全部,查询ID,模糊查询,删除id,全部删除,新增多条/单条 修改)(二)
85 0
|
SQL 数据库管理
【SQL开发实战技巧】系列(九):一个update误把其他列数据更新成空了?Merge改写update!给你五种删除重复数据的写法!
本篇文章讲解的主要内容是:***你有没有经历过一个update把其他列数据清空了、使用merge更新合并记录、删除违反参照完整性的记录、给你五种删除重复数据的写法*** 【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(九):一个update误把其他列数据更新成空了?Merge改写update!给你五种删除重复数据的写法!
|
SQL C# uml
C# SQL添加数据,删除数据,修改数据,查询数据
C# SQL添加数据,删除数据,修改数据,查询数据
187 0
C# SQL添加数据,删除数据,修改数据,查询数据
|
SQL 数据库
开发指南—DML语句—LOAD DATA
本文介绍在PolarDB-X中使用load data进行数据导入的相关限制和注意事项。
|
SQL 数据库
使用 OPEN SQL 语句读取数据库表数据的一个补充练习
使用 OPEN SQL 语句读取数据库表数据的一个补充练习
125 0
使用 OPEN SQL 语句读取数据库表数据的一个补充练习
|
SQL 关系型数据库 MySQL
MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
1965 0