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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
aimingoo的专栏
aimingoo的专栏
D
Docker
N
Netflix TechBlog - Medium
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
美团技术团队
P
Proofpoint News Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
G
Google Developers Blog
腾讯CDC
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
Security Archives - TechRepublic
Security Archives - TechRepublic
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
O
OpenAI News
博客园 - 司徒正美
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
博客园 - 聂微东
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
Vercel News
Vercel News
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Check Point Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
Arctic Wolf
Microsoft Security Blog
Microsoft Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Forbes - Security
Forbes - Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
S
Security @ Cisco Blogs
T
Tor Project blog
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
W
WeLiveSecurity
V2EX - 技术
V2EX - 技术
Simon Willison's Weblog
Simon Willison's Weblog
AI
AI
Security Latest
Security Latest
S
Securelist

博客园 - Arthur_wuancheng(大步牛)

练手之作:易元威客任务发布系统(1) 人生一世 草木一秋 如何进行高效的项目管理?(转) 项目管理的一点总结 极限编程法一点思考 WEB Service 下实现大数据量的传输 (转) 项目经验(转) Atlas 学习笔记: ajax 改进 by Atlas ajax for .net in vs2003 like gmail ^_^ 存储过程分页,以及动态sql(Sql server) C# 2.0 New Feature(1) WebService Enhancements 2.0 Learning Note ref type & out type Duwamish架构分析篇 (转) 程序编码应保持良好的规范(C#)(转) 也谈代码规范 (转) 如何用正确的方法来写出质量好的软件的75条体会 [转] How to Write to Database by EnterPriseLibrary2005 Logging Application Block(项目心得) 自己正在做电信的互联星空项目,里面用到的xml
练手之作:易元威客任务发布系统(2)
Arthur_wuancheng(大步牛) · 2008-10-21 · via 博客园 - Arthur_wuancheng(大步牛)

       昨天(http://www.cnblogs.com/arthur_wuancheng/archive/2008/10/20/1314946.html)把 易元威客的相关需求说了下 今天先来谈谈后端,

关于后端的需求主要达到这2条

         3.需要三层架构,适应未来扩展需求

         4.需要兼容不同的数据库,初步支持 mysql,oracle,mssql,access(结构上支持) 

我们先看看三层架构里面主要的项目  

1.数据实体类YYT.Entity

2.业务逻辑类 封装了 相关数据库操作 YYT.Data.MySql或YYT.Data.SqlServer

3.YYT.Data 数据访问层 主要是DBHelper2.0 以及利用反射 和类工厂构建的相关(mysql或sqlserver或其他数据库)访问类

以上三层 借鉴了Dnt论坛的一些源码 (后来看了一下论坛的源码也借鉴了一些网上的源码)

有关3的反射和类工厂有必要说一下首先在DatabaseProvider 提供了一个反射机制 从配置文件读取相关信息 反射并返回实例

 1         /// <summary>
 2         /// IDbProvider接口
 3         /// </summary>
 4         public static IDbProvider Provider
 5         {
 6             get
 7             {
 8                 if (m_provider == null)
 9                 {
10                     lock(lockHelper)
11                     {
12                         if (m_provider == null)
13                         {
14                             try
15                             {
16                                 m_provider = (IDbProvider)Activator.CreateInstance(Type.GetType(string.Format("YYT.Data.{0}Provider, YYT.Data.{0}", BaseConfigs.GetDbType), falsetrue));
17                             }
18                             catch
19                             {
20                                 throw new Exception("请检查YYT.config中Dbtype节点数据库类型是否正确,例如:SqlServer、Access、MySql");
21                             }
22                             
23                         }
24                     }
25                     
26                         //m_provider = new DbProviderFinder().GetDbProvider("accesss");
27             
28                     
29                 }
30                 return m_provider;
31             }
32         }
33 
34         /// <summary>
35         /// DbFactory实例
36         /// </summary>
37         public static DbProviderFactory Factory
38         {
39             get
40             {
41                 if (m_factory == null)
42                 {
43                     m_factory = Provider.Instance();
44                 }
45                 return m_factory;
46             }
47         }

在ExecuteDataset调用如下

 1         public static DataSet ExecuteDataset(DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
 2         {
 3             if (connection == nullthrow new ArgumentNullException("connection");
 4 
 5             // 预处理
 6             DbCommand cmd = Factory.CreateCommand();
 7             bool mustCloseConnection = false;
 8             PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
 9 
10             // 创建DbDataAdapter和DataSet.
11             using (DbDataAdapter da = Factory.CreateDataAdapter())
12             {
13                 da.SelectCommand = cmd;
14                 DataSet ds = new DataSet();
15                 
16                 
17                 
18                 // 填充DataSet.
19                 da.Fill(ds);
20 
21                 m_querycount++;
22                 
23                 cmd.Parameters.Clear();
24 
25 
26                 if (mustCloseConnection)
27                     connection.Close();
28 
29                 return ds;
30             }
31         }

posted on 2008-10-21 12:07  Arthur_wuancheng(大步牛)  阅读(705)  评论()    收藏  举报