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

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 老姜

SQL Server 2008 收缩日志 【原创】自定义Membership,KSPMembership发布,支持多数据库(mysql/oracle/sqlserver) 日志与工厂模式(二) 日志与工厂模式(一) The timeout period elapsed prior to obtaining a connection from the pool.数据库连接池满的原因 Asp.net mvc 入门介绍(公司内部讲座学习资料) 反射复习(Reflection) SERV-U 防火墙设置 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败 的解决方法 ASP.NET MVC 多语言解决方案 C#(ASP.NET)DateTime日期类型格式化显示 (转载) DLinq 仅支持SQL SERVER ,不支持Mysql/Oracle 从SQL SERVER 2000到SQL SERVER 2005 视图中存在 ORDER BY 语句的完全解决方案 一个中型OA系统的架构过程(二) 掌握 ASP.NET 之路:自定义实体类简介(转载-ORM、泛型等) 转载:一个中型OA系统的架构过程(一) WebServices层次划分 SQL SERVER 2000 存储过程不支持数组的解决方法! 通过日志来恢复到你要的时点
Enterprise Library for .NET Framework 2.0
老姜 · 2006-02-20 · via 博客园 - 老姜

Enterprise Library for .NET Framework 2.0 – January 2006是微软最新发布的企业库,它支持最新的.NET Framework 2.0。它由一系列的企业应用程序块来构成:

1.Data Access Application Block
好处:
减少编写重复累赘代码去执行标准的任务。
帮助在应用程序内部和跨企业应用维护一致的数据访问实践。
降低改变物理数据目标的难度。
减轻开发人员学习不同数据库类型的不同编程模型。
当移植应用程序到不同数据库类型时,减少重写代码的数量。

ADO.NET2.0提供了诸如DbCommand、DbConnection这些类帮助抽象对特定数据库的访问实现,该程序块得益于这些类并提供了更好的封装,例如参数发现和数据类型转换。因此程序可以在不改变客户端代码的情况下从一种数据库类型转向为另一种类型

使用DAAB您只需要做如下工作:
1. 创建Database对象
2. 提供需要的参数
3. 调用适当的方法(这些方法都经过了一定的优化,保障了性能)

例程1.1调用存储过程
Database db = DatabaseFactory.CreateDatabase();

DbCommand dbCommand = db.GetStoredProcCommand("GetProductsByCategory");

// 检索分类ID为7的数据.
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, 7);

DataSet productDataSet = db.ExecuteDataSet(dbCommand);

使用场景
何时该使用DAAB?
该应用程序块是对ADO.NET2.0的补充,它允许你使用相同的数据访问代码来支持不同的数据库。目前虽然只提供SQLServer和Oracle的支持,不过你可以通过GenericDatabase和ADO.NET 2.0 DbProviderFactory对象来增加对其他数据库的支持
如果你想更方便的编写数据访问代码,并具有很好的移植性,DAAB是您很好的选择

何时该直接使用ADO.NET
DAAB是ADO.NET的有效补充,而不是取代它。如果你的程序需要以专门的方法来检索数据,或者使用特定数据库的某些特有功能时,ADO.NET将是你更好的选择

参数处理和参数发现
Database类有一系列的方法来向存储过程传递参数:
AddParameter. 传递参数给存储过程
AddInParameter. 传递输入参数给存储过程
AddOutParameter. 传递输出参数给存储过程
GetParameterValue. 得到指定参数的值
SetParameterValue. 设定参数值

当使用参数发现机制,你必须指定所有的参数值,并将输出参数值设为NULL
例程1.2
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "UpdateProduct";
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand, 11, "Queso Cabrales", 4, 25);
当第一次使用该方法时,会从数据库中来获得参数结构类型,这些参数将被缓存下来,也就是说再次调用该方法时,不需要再次查询数据库获得参数结构类型。


常见操作
1. 使用DbDataReader检索数据
什么情况下使用?
您想快速显示一些只读的数据,并将这些数据绑定到web窗体,这些数据不需要缓存,使用后就可以丢弃掉。
例程1.3
Database db = DatabaseFactory.CreateDatabase();

using (IDataReader dataReader = db.ExecuteReader(CommandType.Text, "Select Name, Address, City From Customers" ))
{
customerGrid.DataSource = dataReader;
customerGrid.DataBind();
}

用法注意:
由于DataReader在使用时数据库连接是打开的,因此你必须在使用后尽早地关闭它。使用using语法保证它总是及时地释放。

2. 使用DataSet检索数据
什么情况下使用?
您想从多表或多数据源中获取数据
你想和其他程序或组件交换数据,例如WebService.
你想检索相关记录
你想执行XML操作,诸如将你的数据进行XSLT转换。

例程1.4
Database db = DatabaseFactory.CreateDatabase();

string sqlCommand = "GetProductsByCategory";
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);

// Retrieve products from category 7.
int category = 7;
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, category);

DataSet productDataSet = db.ExecuteDataSet(dbCommand);
用法注意:
如果你想使用已有的DataSet对象,使用LoadDataSet方法

3.执行一个Command对象并取得输出参数
例程1.5
Database db = DatabaseFactory.CreateDatabase();

string sqlCommand = "GetProductDetails";
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);

db.AddInParameter(dbCommand, "ProductID", DbType.Int32, 3);
db.AddOutParameter(dbCommand, "ProductName", DbType.String, 50);
db.AddOutParameter(dbCommand, "UnitPrice", DbType.Currency, 8);

db.ExecuteNonQuery(dbCommand);

string results = string.Format(CultureInfo.CurrentCulture, "{0}, {1}, {2:C} ",
db.GetParameterValue(dbCommand, "ProductID"),
db.GetParameterValue(dbCommand, "ProductName"),
db.GetParameterValue(dbCommand, "UnitPrice"));

用法注意:
你可以使用ExecuteNonQuery方法而不使用DataSet的insert,delete,update方法来改变数据