2019独角兽企业重金招聘Python工程师标准>>>

还记得,旧旧前发布过一篇文章:文本数据库--.Net界未来的一朵奇葩,引爆超过百条的评论,说明大伙对文本数据库,还是情有所属的。

经过多年的沉淀,在文本的操作上,已经有了些规模,因此,本文写出来和大伙分享一下。

一:Code First 开始:
1:下载CYQ.Data V5,下载地址:http://www.cyqdata.com/download/article-detail-426
2:解压就一个dll,项目添加引用即可。
3:既然是Code First,那我们就直接写实体类,示例如下:
public class Users : CYQ.Data.Orm.OrmBase
{
public Users()
{
this.SetInit(this, "Users", "Txt Path={0}");
}
public int ID {get;set;}
public string UserName {get;set;}
public string Password {get;set;}
}

说明两个点:

1,继承自OrmBase;
2,构造函数里指定表名“Users”和数据库链接(Txt Path={0})。

数据库链接说明({0}代表根目录):

文本数据库(json存储方式):Txt Path={0}
Xml数据库(xml存储方式) :Xml Path={0}
其它数据库,就是各数据库的链接了或配置项了。

OK,现在就可以实操增删改查了,下面轻轻的讲一下。

二:Code First 代码实例
1:插入与更新代码和图如下:

代码说明:

左侧是增加和更新的代码,右侧是一简单的示例操作winform界面,这里有两重点说明。
1:为啥实体类要用using包含操作?
对于文本的操作,内部机制是在内存操作的,直到调用Disponse,才写到文本,因此,用using就是为了结束时调用Disponse写到文件去的。
2:SetAutoParentControl是什么东东?
当控件名按约束起名:为3字母+属性名,如txtUserName,txtPassword时,可以采用自动取值法,
这样你拉N个控件上去,代码也不用改变的。
传进this就是form本身,orm会遍历form下的控件进行取值。

2:对于其它Orm功能,暂不详写了,下载里有api文档说明,这里仅列出接口:

/// <summary>
/// 数据操作公共接口
/// </summary>
/// <typeparam name="T"></typeparam>
internal interface ICommon:IDisposable
{
bool Insert();
bool Insert(InsertOp option);
bool Insert(bool autoSetValue);
bool Insert(bool autoSetValue, InsertOp option);
bool Update();
bool Update(object where);
bool Update(object where, bool autoSetValue);
bool Delete();
bool Delete(object where);
bool Fill(object where);
MDataTable Select();
MDataTable Select(string where);
MDataTable Select(int topN, object where);
MDataTable Select(int pageIndex, int pageSize, string where, out int count);
int GetCount(string where);
bool Exists(string where);
#region UI接口
void GetFrom(object control);
void GetFrom(object control, object value);
bool GetFromJson(string jsonOrFileName);
void SetAutoParentControl(object parent, params object[] otherParent);
void SetAutoPrefix(string autoPrefix, params string[] otherPrefix);
void SetSelectColumns(params object[] columnNames);
void SetTo(object control);
void SetTo(object control, object value, bool isControlEnabled);
void SetTo(object control, object value);
void SetToAll(params object[] parentControls);
#endregion
string TableName { get; set; }
string DebugInfo { get; }
}

三:基础说明解答

1:表从哪来、数据存哪?
系统在初始化时,会根据表名和链接的地址,会根据属性名称自动生成相应的表结构在地址目录,并且以json或xml方式存储数据。

2:where支持sql?

支持的,不过对于txt,xml,内置实现了最基础的sql解析,可以满足>,>=,<,<=,=, is  null, is not  null,like,order by 等基本本询,不支持的有:函数,或group by等语句。

3:实用场景

有时候,数据并不大,用access太纠心,用sqlite服务器安全设置又不允许,用mssql又觉得杀牛不用牛刀,那txt,xml就该出手了。
场景一:比如一简单的配置文件,你写个实体类,就可以轻松的操作了,不用建啥数据库表 。
场景二:Code First的目的,当你需要快速构建代码时,直接就用txt就上了,然后业务代码就可以开始写了,不用等DBA建完库。
后期可根据需要,修改web.config的链接转到mssql,mysql,oracle等数据库,业务代码不变的哟。
当然了, this.SetInit( this,  " Users ",  " Conn ");应该这么写,对应webconfig的Conn配置项。
场景三:对于wp7开发,直接操作txt,还是很合理的。

4:多数据库兼容性

用过 CYQ.Data的朋友都知道,支持多数据库是非常轻松过度的,现在你玩txt,轻松换下链接就到mssql等其它数据库了,所以玩好一个,其它数据库同样是兼容的。
感兴趣的朋友,可以玩一玩,过过Code First的瘾!!!

转载于:https://my.oschina.net/secyaher/blog/274379

周末一起用文本数据库玩玩Code First相关推荐

  1. cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)

    CYQ.Data V5版本的文本数据库,以前有过相关的介绍: 周末一起用文本数据库玩玩Code First 数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍: CYQ.Data ...

  2. cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)-阿里云开发者社区...

    CYQ.Data V5版本的文本数据库,以前有过相关的介绍:周末一起用文本数据库玩玩Code First 数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍: CYQ.Data ...

  3. 无聊画一个五角星玩玩

    无聊,画一个五角星玩玩 code      https://github.com/char0xface/five_pointed_star EXE 链接:https://pan.baidu.com/s ...

  4. 使用OpenGL Shader实现放大镜效果

    使用OpenGL Shader实现放大镜效果 2014年3月16日renjihe发表评论阅读评论 周末闲来无事,想玩玩OpenGL Shader,想想就实现一个放大镜效果的Shader吧. 着色器可以 ...

  5. mysql三-3:完整性约束

    阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 作业 一 介绍 约束条件与数据 ...

  6. MySQL之表的约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KE ...

  7. MySQL(三) 完整性约束

    一.介绍 约束条件与数据类型的宽度意义,都是可选参数. 作用:用于保证数据的完整性和一致性. 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN ...

  8. Arduino Nano下使用u8glib点亮Oled 128x6

    本帖最后由 bbc11234 于 2015-11-27 22:14 编辑 买了个oled,准备玩玩.拿到手一看,完全不懂.上网一查,关于oled这一块都是语焉不详,就没有好好说说要如何接线,如何设置的 ...

  9. mysql数据库进阶书_mysql数据库进阶篇

    一.连表操作 1)为何需要连表操作 1.把所有数据都存放于一张表的弊端1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 2)表设计,分析表与表之间的关系 寻找表与表之间的关系的套路 举例:emp表 ...

最新文章

  1. 一封建议信,不知道这样写可以吗?
  2. Less和Sass的使用
  3. 企业网站SEO优化如何做引流并促进转化?
  4. 保姆级!!前端必会Taro入门级教学!!
  5. jquery 选择器、筛选器、事件绑定与事件委派
  6. java get提交中文乱码_java get方法提交中文乱码问题
  7. [复变函数]第13堂课 作业讲解; 4 解析函数的幂级数表示法 4.1 复级数的基本性质...
  8. JavaScript我学之七数组
  9. 【TDA4系列】向 PSDKRA 添加新的图像传感器
  10. Linux:TCP粘包问题的模拟实现以及解决方法
  11. uniapp弹窗滚动阻止外部滚动
  12. 利用openpose跑关键点
  13. 1098:质因数分解(信奥)
  14. 按理说机械硬盘和固态硬盘使用得当寿命几乎一样长,但为什么网上传言机械硬盘更容易坏?
  15. JS:offsetParent屬性
  16. 东北大学继续教育学院计算机辅助数控编程,计算机辅助数控编程B卷李虎.doc离线.doc...
  17. 服务器里怎么设置微信多开,私域必备,企业微信多开的4种方法
  18. 【mysql是怎样运行的】-客户端与服务器连接
  19. 独立云清洗服务器适合游戏行业使用吗?
  20. 思科认证考试(CCNA、CCNP)注意事项考前必读

热门文章

  1. Exchange 2007 配置POP3
  2. clion配置_Ubuntu16.04系统下用CLion编译器调试ROS代码详细教程
  3. 系统运维包括哪些内容_电力电缆到货验收包括哪些内容?
  4. centos装oracle6,CentOS-6.7下安装Oracle11g
  5. php access增删改查,同一窗体实现增删改查
  6. vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight
  7. mt4指标最精准组合指标_股市最赚钱的黄金指标组合:KDJ+MACD指标的配合使用,助于买在低点卖在高点!...
  8. java 循环展开_Java在Debug的时候,有些变量能无限展开(循环了)?
  9. android ip 黑白名单,GaussDB T 单机 IP黑白名单配置
  10. 第二种PHP协议,PHP多种形式,第二种使用来自First的数据