惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - BG5SBK

公告:胡搞瞎搞工作室换地方了! 本周末厦门.NET俱乐部活动(借首页发下....不好意思) BG5SBK.FrameworkV2 新版本与帮助文档发布 BG5SBK.FrameworkV2.Data 支持语言化查询了 支持.NET 2.0又支持中文的NDoc 设计了一张89S51实验板 Flex Builder 2 注册码 OpCodes中文说明(转&收藏) DIY 的 LinQ 感光电路板制作(转&收藏) 上拉与下拉电阻(转&收藏) 虾米是怎样炼成的(转&收藏) GBA开发入门(转&收藏) ARM的开发步骤(转&收藏) 关于SQL 参数的一次测试(重新又测了一次) 打火机组装摩托车(Cool!) 收藏几个有意思的SQL脚本 今天老婆给我画的画像 不用客户端软件的杂志平台Koo123
BG5SBK.FrameworkV2.DataLayer更新,附带详细说明
BG5SBK · 2006-07-07 · via 博客园 - BG5SBK

    此次主要更新有:
    1.增加了DataSession (数据库会话)类,用于需要在一次数据库连接或者事务处理中执行多个操作的地方
    2.改进了资源回收,可以使用完立即销毁的对象就立即销毁,避免增加服务器负担
    3.改成DataProvider代替所有具体DataProvider子类进行实体对象操作,这样做的目的是为业务层提供统一接口,为下一步的持久层改造做好准备。不过依然还是支持与具体实体类对应的DataProvider子类对实体对象操作,但是建议不要使用。
   
    其它相关文章请看:
轻量级持久层框架V2版本 

    以下举几个例子:(假设我们有一张表名为Table1,影射它的实体类也叫Table1)
    0.配置文件:

  <appSettings>
    
<add key="DefaultDatabase" value="DefaultDB"/>
  
</appSettings>
  
<connectionStrings>
    
<add name="DefaultDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Downloads\Save\Personal\test .mdb" providerName="System.Data.OleDb"/>
    
<add name="DataBase2" connectionString="Server=(local);Database=Northwind;uid=;pwd=" providerName="System.Data.SqlClient"/>
  
</connectionStrings>

    <add key="DefaultDatabase" value="DefaultDB"/>是指定默认的数据库连接字符串,DataProvider<Table1>.GetInstance()就是使用默认数据库连接,如果要自定非默认的数据库连接可以使用:DataProvider<Table1>.GetInstance("DataBase2"),框架中的DataAccess.Create()也是如此!!
    目前支持的providerName有:System.Data.SqlClient,System.Data.Odbc,System.Data.OleDb
使用OleDb千万注意!!!,CodeSmith生成的包含日期类型字段表的DataProvider代码中,DbType.DataTime全部要替换成DbType.String,否则会出现数据类型不匹配的异常!

    1.执行一次简单查询:

    //返回前10条数据
    List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10nullnull);  
    
    
2
.执行带条件和排序的简单查询:
    
//获取CreateTime等于今天日期的所有记录,并按Name降序排列

    List<Table1> _result = DataProvider<Table1>.GetInstance().Select(0string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()), "[Name] desc");

    3.执行查询,只返回指定字段的值:

    //返回前10条记录的CreateTime字段的值,其余字段值不获取
    List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10nullnull, Table1.ColumnNames.CreateTime);
   
    
//返回前10条记录的CreateTime字段的值,其余字段值不获取,字段限定参数是不定长的,需要几个字段就一直加下去

    List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10nullnull, Table1.ColumnNames.CreateTime,  Table1.ColumnNames.Name);

    4.执行复杂查询:

    //复杂查询必须结果集中的字段都是实体类中有的字段,其余非本实体类的字段将会丢弃
    string _sql = string.Format("Select a.* From Table1 as a, Table2 as b Where Table2.ID='{0}' And Table1.Name=Table2.Name"123);
    List
<Table1> _result = DataProvider<table1>
.GetInstance().Select(_sql);

    5.根据主键返回结果:

    //返回主键值为123的所有结果,这里不使用单个对象返回结果是为了方便在前台直接进行数据绑定
    List<Table1> _result = DataProvider<table1>.GetInstance().SelectByKeys(0"123");

    6. 插入单个实体对象:
    

    Table1 _newItem = new Entity.Table1();
    _newItem.CreateTime 
=
 DateTime.Now;

    DataProvider
<Table1>
.GetInstance().Insert(_newItem);

    
//插入对象时可以指定要插入哪些字段,字段限定参数是不定长的,需要几个字段就一直加下去

    DataProvider<Table1>.GetInstance().Insert(_newItem, Table1.ColumnNames.CreateTime);

    7.插入多个实体对象:

    Table1 _newItem1 = new Entity.Table1();
    _newItem.CreateTime 
=
 DateTime.Now;

    Table1 _newItem2 
= new
 Entity.Table1();
    _newItem.CreateTime 
=
 DateTime.Now;

    List
<table1> _newList = new List<table1>
();
    
    _newList.Add(_newItem1);
    _newList.Add(_newItem2);

    DataProvider
<Table1>
.GetInstance().Insert(_newList);
    
//插入多个对象一样可以指定要插入哪些字段,这里不再例举

    8.更新单个或多个对象:

    //Update接口和Insert接口参数和参数用途都是一样,这里简单例举就好,可以同上面一样指定更新某些字段的值而不全部更新
    DataProvider<Table1>.GetInstance().Update(_newItem);
    DataProvider
<Table1>.GetInstance().Update(_newList);

    9.删除对象或多个对象:

    //删除主键值为123的对象
    DataProvider<Table1>.GetInstance().Delete("123");

    
//删除CreateTime字段值为今天日期的所有记录

    DataProvider<Table1>.GetInstance().DeleteByFilter(string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()));

    10.使用DataSession避免反复打开关闭数据库连接:

    
    
//在同一次数据库连接中执行两次查询

    using (DatabaseSession _seesion = new DatabaseSession())
    
{
        List
<Table1> _result1 = DataProvider<Table1>.GetInstance().Select(10nullnull
); 
        List
<Table1> _result2 = DataProvider<Table1>.GetInstance().Select(10nullnull
, Table1.ColumnNames.CreateTime);
    }

   
    11.使用DataSession将非查询操作包含在同一事物处理中:

    using (DatabaseSession _seesion = new DatabaseSession())
    
{
        Table1 _newItem 
= new
 Entity.Table1();
        _newItem.ID 
= "123"
;
        _newItem.CreateTime 
=
 DateTime.Now;

        DataProvider
<Table1>
.GetInstance().Insert(_newItem);
    
        _newItem.Name 
= "XXX"
;

        DataProvider
<Table1>
.GetInstance().Update(_newItem);
    }

   12.执行复杂的SQL脚本,存储过程等。。。:
    这些东西交给DataAccess执行,一般使用DataAccess.DefaultInstance就可以,特殊情况使用DataAccess.Create()创建DataAccess实例

    新版文件下载:(用于自动生成代码的CodeSmith V3.2 的模版文件在Templates目录中,不懂使用可以问我)

[2006-07-18-01] BG5SBK.FrameworkV2.rar

    有待改进的地方:
    1.期待下一次更新使用CodeDom技术缓存反射信息,这样不用再使用CodeSmith自动生成代码
    2.SQL脚本暴露!这个是严重影响项目迁移的问题!并且SQL脚本不能在编译时马上发现错误,就像定时炸弹一样!
    3.我也想搞个LazyLoad,可以在再入大量数据时降低程序负担

    其它相关文章请看:

轻量级持久层框架V2版本