CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data V5 批量插入与批量更新示例
框架技术交流区 |
|
|
| #楼主 |
最近有网友问了我 CYQ.Data 要怎么实现批量修改,于是我就给写了以下的示例: 示例为Winform应用,现实对DataGridView控件单元格的内容后,可以实现自动更新到数据库。 先上最终结果图: 接下上一张项目解决方案图: 由于是写Demo,所以我一般都选择用文本数据库做为示例。 我新建了一个Users.ts,内容为: ID,int; UserName,string; CreateTime,datetime; 意思就是表名为“Users”,字段为“ID,UserName,CreateTime”。 对应的标准型枚举文件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通用分页控件实战篇(提供源码下载) |
游客[注册][106.104.43.*]2013/9/18 1:22:27 | #1 | |
我想请问,关於app.config有什麽好的保密方法? 回复: 不用app.config,可以把默认数据库链接写在代码里,对AppConfig.DB.DefaultConn赋值数据库链接也可以全局有效。 |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我mysql的提示 V5.7.7.4 MySql.xxxx:check the tablename "tbl_site_info" is exist? error:ExeDataReader():Expression #1 of ORDER BY clause is not in SELECT list, references column 'information_schema.s1.ORDINAL_POSITION' which is not in SELECT list; this is incompatible with DISTINCT 配置如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="Conn" connectionString="host=192.168.3.101;Port=3306;Database=xxxxx;uid=root;pwd=2017" providerName="MySql.Data.MySqlClient"/> </connectionStrings> </configuration>
- 查询语句有点问题,软件启动时查询语句可以从数据库查询出数据,软件一直运行时无论怎么修改数据库,查询出来的还是老数据,不知道是为什么
- 我语句中用到了union all而且两个查询都有查询条件,action.select总是不成功,不知道有没有什么好的解决办法,谢谢
- 大神,如果我想通过一个对象(从数据映射过来的)要插入的话,我需要遍历字段然后每个set一下吗?有没有更好的方法??
- 真心好用,想问下秋天直接拼写sql怕注入吗
- V4.5后,好多方法都改变了,求来个新的日志帮助
- 請問大神V5源碼要多少錢 我是和交流過的
- 楼主,,从数据库里查出来并绑定datagridview,但是显示的都是数据库里的英文名,怎么改??好纠结啊这个。。。。
- 我想问一下,主从表添加怎样处理
- 10年就过了!!!!