企业库之数据访问的一个小应用
2006-09-07 15:43
225 查看
使用过微软的企业库的朋友应该能感受到Application Block给我们带来的方便和高速的开发体验,
特别是在DataAccessApplicationBlock这一块.它简化了数据访问的公共方法,并且能适用于多种
应用情景,比如读取数据来显示,在各应用层之间传递数据,或提交更新后的数据到数据库.应用程
序块支持存储过程,内联SQL语句.同时压缩了像管理连接对象,创建和缓存参数等通用任务管理的应
用程序方法体.换句话说,数据访问应用程序块在简化的类中提供了ADO.net频繁使用的功能,推进了
开发的效率.
毋须多言,下面介绍一个使用DataSet更新数据库的范例,其中有借助了ADO.net中的离线模型的功能.
1.准备一组增加,删除,修改的存储过程,代码如下:
CREATE PROCEDURE AddProduct
(
@ProductName nvarchar(50),
@CategoryID int,
@UnitPrice money
)
AS
INSERT INTO Products (ProductName, CategoryID, UnitPrice)
VALUES (@ProductName, @CategoryID, @UnitPrice)
SELECT ProductID, ProductName, CategoryID, UnitPrice
FROM Products
WHERE ProductID = SCOPE_IDENTITY()
GO
CREATE PROCEDURE DeleteProduct
(
@ProductID int
)
AS
DELETE Products
WHERE ProductID = @ProductID
GO
CREATE PROCEDURE UpdateProduct
(
@ProductID int,
@ProductName nvarchar(50),
@LastUpdate datetime
)
AS
UPDATE Products
SET ProductName = @ProductName
WHERE ProductID = @ProductID AND LastUpdate = @LastUpdate
IF @@ROWCOUNT > 0
-- This statement is used to update the DataSet if changes are done on the updated record (identities, timestamps or triggers )
SELECT ProductID, ProductName, CategoryID, UnitPrice
FROM Products
WHERE ProductID = @ProductID
GO
2.建立操作数据库的函数
Database db = DatabaseFactory.CreateDatabase();//使用默认连接字符串配置
//初始化DataSet并填充数据
DataSet productsDataSet = new DataSet();
string sqlCommand = "Select ProductID, ProductName, CategoryID, UnitPrice, LastUpdate " +
"From Products";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
string productsTable = "Products";
db.LoadDataSet(dbCommand, productsDataSet, productsTable);
// 从DataSet中得到DataTable
DataTable table = productsDataSet.Tables[productsTable];
//增加一行新值
DataRow addedRow = table.Rows.Add(new object[]
{DBNull.Value, "New product", 11, 25});
//修改一行记录的值
table.Rows[0]["ProductName"] = "Modified product";
//创建DbCommand对象,将增加,删除,修改的存储过程与待更新的DataSet绑定.
DbCommand insertCommand = db.GetStoredProcCommand("AddProduct");
db.AddInParameter(insertCommand, "ProductName", DbType.String, "ProductName", DataRowVersion.Current);
db.AddInParameter(insertCommand, "CategoryID", DbType.Int32, "CategoryID", DataRowVersion.Current);
db.AddInParameter(insertCommand, "UnitPrice", DbType.Currency, "UnitPrice", DataRowVersion.Current);
DbCommand deleteCommand = db.GetStoredProcCommand("DeleteProduct");
db.AddInParameter(deleteCommand, "ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
DbCommand updateCommand = db.GetStoredProcCommand("UpdateProduct");
db.AddInParameter(updateCommand, "ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
db.AddInParameter(updateCommand, "ProductName", DbType.String, "ProductName", DataRowVersion.Current);
db.AddInParameter(updateCommand, "LastUpdate", DbType.DateTime, "LastUpdate", DataRowVersion.Current);
//提交DataSet,自动调用存储过程更新数据库中相关的记录
int rowsAffected = db.UpdateDataSet(productsDataSet, "Products", insertCommand, updateCommand,
deleteCommand, Microsoft.Practices.EnterpriseLibrary.DataAccess.UpdateBehavior.Standard);
这个方法不需要主动调用增加,删除,修改的存储过程,而是指派给DbCommand对象,由它根据提交的数据集
自动比照来决定何时调用,此乃居家必备之良方-----相当滴省心啊.
关于企业库的好东东,希望各位DotNeters多多交流.以便我们的开发更有乐趣.
2006-08-21 10:22 by Simon Wang
UpdateDataSet是非常的好用,而且效率极高,之前自己写了方法实现类似的功能,极端情况下运行速度竟然达到40秒,改用UpdateDataSet,提升到1秒,天壤之别啊!!!!
特别是在DataAccessApplicationBlock这一块.它简化了数据访问的公共方法,并且能适用于多种
应用情景,比如读取数据来显示,在各应用层之间传递数据,或提交更新后的数据到数据库.应用程
序块支持存储过程,内联SQL语句.同时压缩了像管理连接对象,创建和缓存参数等通用任务管理的应
用程序方法体.换句话说,数据访问应用程序块在简化的类中提供了ADO.net频繁使用的功能,推进了
开发的效率.
毋须多言,下面介绍一个使用DataSet更新数据库的范例,其中有借助了ADO.net中的离线模型的功能.
1.准备一组增加,删除,修改的存储过程,代码如下:
CREATE PROCEDURE AddProduct
(
@ProductName nvarchar(50),
@CategoryID int,
@UnitPrice money
)
AS
INSERT INTO Products (ProductName, CategoryID, UnitPrice)
VALUES (@ProductName, @CategoryID, @UnitPrice)
SELECT ProductID, ProductName, CategoryID, UnitPrice
FROM Products
WHERE ProductID = SCOPE_IDENTITY()
GO
CREATE PROCEDURE DeleteProduct
(
@ProductID int
)
AS
DELETE Products
WHERE ProductID = @ProductID
GO
CREATE PROCEDURE UpdateProduct
(
@ProductID int,
@ProductName nvarchar(50),
@LastUpdate datetime
)
AS
UPDATE Products
SET ProductName = @ProductName
WHERE ProductID = @ProductID AND LastUpdate = @LastUpdate
IF @@ROWCOUNT > 0
-- This statement is used to update the DataSet if changes are done on the updated record (identities, timestamps or triggers )
SELECT ProductID, ProductName, CategoryID, UnitPrice
FROM Products
WHERE ProductID = @ProductID
GO
2.建立操作数据库的函数
Database db = DatabaseFactory.CreateDatabase();//使用默认连接字符串配置
//初始化DataSet并填充数据
DataSet productsDataSet = new DataSet();
string sqlCommand = "Select ProductID, ProductName, CategoryID, UnitPrice, LastUpdate " +
"From Products";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
string productsTable = "Products";
db.LoadDataSet(dbCommand, productsDataSet, productsTable);
// 从DataSet中得到DataTable
DataTable table = productsDataSet.Tables[productsTable];
//增加一行新值
DataRow addedRow = table.Rows.Add(new object[]
{DBNull.Value, "New product", 11, 25});
//修改一行记录的值
table.Rows[0]["ProductName"] = "Modified product";
//创建DbCommand对象,将增加,删除,修改的存储过程与待更新的DataSet绑定.
DbCommand insertCommand = db.GetStoredProcCommand("AddProduct");
db.AddInParameter(insertCommand, "ProductName", DbType.String, "ProductName", DataRowVersion.Current);
db.AddInParameter(insertCommand, "CategoryID", DbType.Int32, "CategoryID", DataRowVersion.Current);
db.AddInParameter(insertCommand, "UnitPrice", DbType.Currency, "UnitPrice", DataRowVersion.Current);
DbCommand deleteCommand = db.GetStoredProcCommand("DeleteProduct");
db.AddInParameter(deleteCommand, "ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
DbCommand updateCommand = db.GetStoredProcCommand("UpdateProduct");
db.AddInParameter(updateCommand, "ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
db.AddInParameter(updateCommand, "ProductName", DbType.String, "ProductName", DataRowVersion.Current);
db.AddInParameter(updateCommand, "LastUpdate", DbType.DateTime, "LastUpdate", DataRowVersion.Current);
//提交DataSet,自动调用存储过程更新数据库中相关的记录
int rowsAffected = db.UpdateDataSet(productsDataSet, "Products", insertCommand, updateCommand,
deleteCommand, Microsoft.Practices.EnterpriseLibrary.DataAccess.UpdateBehavior.Standard);
这个方法不需要主动调用增加,删除,修改的存储过程,而是指派给DbCommand对象,由它根据提交的数据集
自动比照来决定何时调用,此乃居家必备之良方-----相当滴省心啊.
关于企业库的好东东,希望各位DotNeters多多交流.以便我们的开发更有乐趣.
2006-08-21 10:22 by Simon Wang
UpdateDataSet是非常的好用,而且效率极高,之前自己写了方法实现类似的功能,极端情况下运行速度竟然达到40秒,改用UpdateDataSet,提升到1秒,天壤之别啊!!!!
相关文章推荐
- 企业库数据访问应用程序块DAAB分析与应用(1):数据操作方法(上)
- 数据访问的一个小应用( db.LoadDataSet / db.UpdateDataSet)
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块
- 一个web应用的诞生(4)--数据存储
- 清空数据Android 跳转到一个应用安装的详情界面的方法
- 当web应用中面临大数据量同时并发量比较大的情况下性能是一个尤为重要的问题,面对性能优化我们应从何做起,在哪些方面做优化呢?
- 黄聪:wordpress向一个页面POST数据,出现404页面访问不了
- 用汇编语言写的一个模仿IE访问网站数据包的程序片段
- php 访问一个网站地址,发送post数据和设置cookie,取得服务器返回的数据(html,setcookie命令设置的cookie);
- 【Xamarin开发 Android 系列 10】 创建一个Json读取数据应用-详情页(下)
- FIF全称People Finder Interchange Format是一个应用广泛的数据开源的标准协议
- 一个类的友元类能访问类的私有数据
- C# 多线程如何访问同一个数据
- 第十五章 数据访问部件的应用及编程(一)
- 一个抽象工厂数据访问模块(a data access component using abstract factory pattern SQL/OLEDB/ODBC)
- 一个resin运行多个应用,使用nginx控制访问
- 【图文教程】五分钟内搞一个双十一数据大屏_实时看到自己的业务访问情况
- 在数据库频繁访问与本地处理数据之间找到一个平衡