![]() | CYQ.Data 数据层框架CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。 |
CYQ.Data 数据框架 版本发布 V1.3
平台动态 |
|
|
| #楼主 |
继上一篇:CYQ.Data 数据框架 应用示例 聊天室 之后,有兴趣的读者可以放心使用及应用或练习了! 不过,在稳定版本之后,本人又进行了一次华丽的升级,升级记录如下: ![]() ![]() 1:MAction:增加ResetTable功能 2:MAction:增加在Update/Insert/Fill/ResetTable失败时,自动调用Close() 3:MAction:修改Fill方法:将之前如果填充时有多条记录返回失败,改成返回首条记录 4:MAction:增加SetAutoPrefix方法,可传多个控件前缀 5:MAction:Update方法开放自动获取控件值功能 6:MAction:关闭属性DataSQLHelper的返回 7:MProce:新出产类,用于存储过程操作 8:OutPutData:新增加对存储过程枚举的导出 9:OutPutData:增加ExeCreateProc方法用于直接执行生成分页存储过程 以下针对更新进说明: 1:增加ResetTable功能:减少New MAction的个数 同一个函数中,如果要用到多个表切换查询,你可能每次都要New一个MAction,于是为了减少New的个数,多了此函数,下面看一下用法:
![]() ![]() MAction action = new MAction(TableNames.Users); if(action.Fill("UserName='Cyq'")) { action.SetTo(labUserName); int id=action.Get<int>(Users.ID); if (action.ResetTable(TableNames.Message)) { if (action.Fill("UserID=" + id)) { action.SetTo(labBody); } } action.Close(); } 根据用户名获取完数据之后,取到用户ID,然后切换到消息留言表,根据用户ID填充取第一条数据。 2:增加在Update/Insert/Fill/ResetTable失败时,自动调用Close():改进后可省点代码 我们看一下上节示例代码登陆: ![]() ![]() protected void btnLogin_Click(object sender, EventArgs e) { MAction action = new MAction(TableNames.Users); if(action.Fill(string.Format("UserName='{0}' and Password='{1}'", txtUserName.Text.Trim(), txtPassword.Text.Trim()))) { Session["ID"] = action.Get<int>(Users.ID); action.Close(); Response.Redirect("Default.aspx"); } else { lbMsg.Text = "用户密码错误!"; action.Close(); } } 在没有改进之后,你会发现,代码里会出现两次的action.Close(); 当然,如果中间没有出现Response.Redirect这么突然的转向,你可以把Action.Close()放到最后面去,这样也只有一条。 然而经过小小的改良后,就算有Response.Redirect,你也可以省略下面一个action.Close()了。 ----就省略一行,看起来似乎不太咋的,可如果在多重if分支中使用,其效果就会变的相当的明显的,如: ![]() ![]() MAction action = new MAction(TableNames.Users); if (action.Fill(1)) { //省略N行代码 if (action.Insert()) { //省略N行代码 if (action.Update()) { action.Close(); } } } 这种情况下,你不用关注在失败时要关闭数据库链接,你只需要关注成功时,关闭就行了, 当然中间来个break/return/continue;就得注意点了。 3:MAction:修改Fill方法:有多条记录时返回失败,改成返回首条记录 在本版本之前,在Fill完之后,如果有多条记录,会返回false,本次修改返回首条记录: 因此,你甚至可以这样填充获取最后一条记录: ![]() ![]() MAction action = new MAction(TableNames.Message); if (action.Fill("UserID=2 order by id desc")) { action.SetTo(txtBody); action.Close(); } 由于Fill后组合的是where语句,你可以增加order by 来排序获取尾条记录。 4:MAction:增加SetAutoPrefix方法,可传多个控件前缀 ![]() ![]() MAction action = new MAction(TableNames.Message); action.AutoPrefix = "txt"; if (action.Insert(true)) { action.Close(); } 以上操作能自动获取txt+字段名的控件的值;可是,我们一般情况下,控件的前缀是多种多样的,于是经过改良后: ![]() ![]() MAction action = new MAction(TableNames.Message); action.SetAutoPrefix("txt","ddl","lab"); if (action.Insert(true)) { action.Close(); } 系统能自动获取界面上面三种前缀组合的控件值。同时去掉了AutoPrefix属性。 5:MAction:Update方法开放自动取控件值功能。 在此版本之前,Update方法没有开放自动取值功能,改良后开放了Update方法的自动取值功能,如: ![]() ![]() MAction action = new MAction(TableNames.Message); action.SetAutoPrefix("txt","ddl","lab"); if (action.Update("id=1",true)) { action.Close(); } 6:MAction:关闭属性DataSQLHelper的返回 此版本之前,你可以通过action.DataSqlHelper获取到底层的SQLHelper对象。 之前开放是为了开放底层来操作存储过程。由于出产了MProc专业户处理存储过程,所以关闭属性了。 7:MProce:新出产类,存储过程操作专业户
![]() ![]() MProc proc = new MProc(ProcNames.GetUserList); proc.AddParas(Users.ID, 1); gvProcUsers.DataSource=proc.ExeDataTable(); gvProcUsers.DataBind(); proc.ResetProc(ProcNames.GetMessageList); proc.AddParas(Message.UserID, 1); gvProcMessage.DataSource = proc.ExeDataTable(); gvProcMessage.DataBind(); proc.Close(); 8:OutPutData:新增加对存储过程枚举的导出 CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData(); Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.P, CYQ.Data.SQL.OutPutData.FiledDescriptionType.Sql2005)); 说明: TableType.P:存储过程枚举 TableType.U:表枚举 TableType.V:视图枚举 如生成存储过程枚举如下: public enum ProcNames { GetMessageList, GetUserList, } 9:OutPutData:增加ExeCreateProc方法用于直接执行生成的分页存储过程。 CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData(); Response.Write(write.ExeCreateProc(CYQ.Data.SQL.OutPutData.FiledDescriptionType.Sql2005)); 生成的存储过程会直接被执行到数据库中,不用再复制到数据库执行了。 OK,本次升级介绍到此结束,欢迎讨论、使用与留言!!! 最后提供华丽升级版本V1.3下载:点击下载[大小:60K 没加密没混淆没限制,可放心使用,可直接用Reflector.exe查看源码] ![]() |
发表评论
论坛公告
帖子搜索
最新帖子
最新评论
- 请教博主。我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年就过了!!!!