使用企业库进行数据操作.docx
- 文档编号:11457836
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:10
- 大小:69.58KB
使用企业库进行数据操作.docx
《使用企业库进行数据操作.docx》由会员分享,可在线阅读,更多相关《使用企业库进行数据操作.docx(10页珍藏版)》请在冰豆网上搜索。
使用企业库进行数据操作
使用企业库进行数据操作
一、企业库-数据处理模块简介
微软企业库的数据处理应用模块(TheDataAccessApplicationBlock,以下简称DAAB)通过提供合理的逻辑模块来帮助.net开发人员从繁重的数据访问、处理工作中解脱出来。
开发人员仅需做如下的工作:
1、创建数据库(连接)对象
2、通过命令行(command)提供数据访问及处理所需的各种参数
3、调用DAAB提供的相应处理方法获得已封装好的DataSet等对象。
DAAB支持SQLServer、SQLServerCE以及Oracle等数据库。
DAAB将常见的数据处理操作进行适当分类并针对这些分类向开发者们提供相应的解决方案(包括可调用的方法等)。
这些解决方案(操作)包括:
1、通过使用一个DataReader对象来获得多条数据
2、通过使用一个DataSet对象来获得、封装多条数据
3、执行一条sql命令并获得返回值
4、执行一条sql命令并返回一个单值对象
5、通过一个事务执行多项数据库操作
6、从SQLServer获得XML格式的数据
7、根据封装在一个DataSet中的数据更新数据库
二、配置DAAB应用模块
当我们安装了企业库后,在VS2008的解决方案资源管理器中右键点击应用的配置文件,在弹出的菜单中将会出现一个新的选项 – “EditEnterpriseLibraryConfiguration”,点击它将打开TheEnterpriseLibraryconfigurationtools提供的编辑界面(通过该工具我们可以对一个应用中使用到的所有企业库的模块进行配置),如图所示:
打开App.config,添加了DAAB模块节点“DataAccessApplicationBlock”,然后再添加DataBaseInstance,设置DataBaseInstance的Name和DatabaseProvider的值,设置DatabaseSettings的DefaultDatabase值。
编辑DatabaseInstance的ConnectionString的值。
三、在应用程序中加入相关代码
1. 加入相关企业库DLL文件的引用
(1) 加入Microsoft.Practices.EnterpriseLibrary.Data.dll库的引用,它的一般位置是:
“<安装盘>:
/ProgramFiles/MicrosoftEnterpriseLibrary5.0/Bin/”
(2) 加入Microsoft.Practices.EnterpriseLibrary.Common.dll库的引用,它的一般位置是:
“<安装盘>:
/ProgramFiles/MicrosoftEnterpriseLibrary5.0/Bin/”
2、加入DAAB命名空间、必要的DATA命名空间的引用
usingMicrosoft.Practices.EnterpriseLibrary.Data;
usingSystem.Data;
usingSystem.Data.Common;
3、 创建数据库对象
DAAB模块提供一个DatabaseFactory类来创建所需的Database对象,创建后的db对象实例封装了常用的针对一个数据库的操作。
我们可以通过调用不带参数的DatabaseFactory.createDatabase()方法来生成一个默认的数据库对象,该对象包含的数据库连接信息就是刚才我们在配置文件中设置的“DefaultDatabase”属性的信息。
当然,我们还可以用带参数的重载createDatabase()方法,即给createDatabase()加入string类型的参数,以便Factory生成指定的Database对象。
创建一个数据库对象的代码如下:
Databasedb=DatabaseFactory.CreateDatabase();
或 Databasedb=DatabaseFactory.CreateDatabase(“SQLCon”);
这里需要提到一点,Database实际上是一个虚类,当我们调用CreateDatabase()时候返回的是一个Database的派生类,具体类型由配置文件中数据库连接字符串对象的ProviderName属性决定。
如果按以上代码,实际返回的是一个SqlDatabase类的实例。
4、使用Database实例提供的各种方法进行操作
ExecuteReader:
返回结果仅仅显示,不做更新、添加、删除操作;
ExecuteDataSet:
需要返回单表或多表数据;
如果你需要逐一访问数据库的每一条记录,这个时候如果使用DataReader的话,则会使与数据库的连接一直处于打开的状态,长此以往,就会使应用程序的性能和可伸缩性大大降低。
需要和其他的应用程序交换数据。
ExecuteNonQuery:
主要执行insertupdatedelete操作;SQL语句执行影响的行数
ExecuteScalar:
执行ExecuteScalar返回单值
LoadData:
加载数据到一个已经存在的数据集
UpdateDataSet:
使用已经存在的数据集更新数据库内容
GetStoredProcCommand:
返回一个存储过程的数据库command对象
GetSqlStringCommand:
返回一个SQL语句的数据库command对象
ExecuteXmlReader:
返回xml格式的数据,xmlReader类型,这个只能用在SQLServer数据库,通过SqlDatabase类调用,Database类中没有这个方法。
ExecuteSproAccessor:
使用存储过程返回一个客户端可以查询的序列对象
ExecuteSqlStringAccessor:
使用SQL语句返回一个客户端可以查询的序列对象
TransactionScope:
支多项事务同时执行,一旦发生异常则会回滚所有操作
还有其他的,不在一一列举…….
部分操作应用实例:
(1) 通过ExecuteNonQuery.方法执行SQL语句:
///
///执行ExecuteNonQuery
///
privatevoidExecuteNonQuery_Click(objectsender,EventArgse)
{
db.ExecuteNonQuery(CommandType.Text,"INSERTINTO[College]([CollegeID],[Name])values(6,'体育学院')");
}
(2) 执行ExecuteDataSet,返回DataSet类型的数据集.
(3) 执行ExecuteScalar,返回第一行第一列的值.
///
///执行ExecuteScalar,返回第一行第一列的值
///
///
privatevoidExecuteScalar_Click(objectsender,EventArgse)
{
Databasedb=DatabaseFactory.CreateDatabase("ConnectionString");
stringsql="select[Name]fromCollegewhere[CollegeID]=1";
DbCommanddc=db.GetSqlStringCommand(sql);
stringstr="获取的学院名称为:
"+(string)db.ExecuteScalar(dc);
MessageBox.Show(str);
sql="select[CollegeID]fromCollegewhere[CollegeID]=1";
dc=db.GetSqlStringCommand(sql);
str="获取的学院ID为:
"+(int)db.ExecuteScalar(dc);
MessageBox.Show(str);
}
(4) 执行存储过程.
///
///执行存储过程
///
privatevoidStoredProcCommand_Click(objectsender,EventArgse)
{
DbCommanddc=db.GetStoredProcCommand("usp_College_LoadByID");
db.AddInParameter(dc,"@CollegeID",System.Data.DbType.Int32,5);
dataGridView1.DataSource=db.ExecuteDataSet(dc).Tables[0];
}
(5) 通过代码实现事务.
///
///事务
///
privatevoidTransaction_Click(objectsender,EventArgse)
{
DbCommanddc1=db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(dc1,"@CollegeID",DbType.Int32,7);
db.AddInParameter(dc1,"@Name",DbType.String,"文旅学院");
DbCommanddc2=db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(dc2,"@CollegeID",DbType.Int32,7);
db.AddInParameter(dc2,"@Name",DbType.String,"化工学院");
using(DbConnectionconn=db.CreateConnection())
{
conn.Open();
DbTransactiontrans=conn.BeginTransaction()
try
{
//添加一个ID为7的学院
db.ExecuteNonQuery(dc1,trans);
//添加一个ID为7的学院,主键重复,事务将回滚
db.ExecuteNonQuery(dc2,trans);
//提交事务.
trans.Commit();
}
catch
{
//回滚
trans.Rollback();
}
conn.Close();
}
//查看数据库,数据未被添加,说明事务已回滚
ExecuteDataSet_Click(null,null);
}
(6) 通过DataSet更新数据库.
///
///通过DataSet更新数据库
///
privatevoidDataSetUpdate_Click(objectsender,EventArgse)
{
DataSetproductsDataSet=newDataSet();
stringsql="Select*FromCollege";
DbCommandcmd=db.GetSqlStringCommand(sql);
stringCollegeTableName="College";
//恢复原始数据
db.LoadDataSet(cmd,productsDataSet,CollegeTableName);
//获取数据表格
DataTabledTable=productsDataSet.Tables[CollegeTableName];
//添加一个新信息入DataSet中
DataRowaddedRow=dTable.Rows.Add(newobject[]{8,"外国语学院"});
//修改一个原有数据
dTable.Rows[0]["Name"]="国教院";
//提供插入,更新,删除存储过程
DbCommandinsertCommand=db.GetStoredProcCommand("usp_College_Insert");
db.AddInParameter(insertCommand,"@CollegeID",DbType.Int32,"CollegeID",DataRowVersion.Current);
db.AddInParameter(insertCommand,"@Name",DbType.String,"Name",DataRowVersion.Current);
DbCommanddeleteCommand=db.GetStoredProcCommand("usp_College_Delete");
db.AddInParameter(deleteCommand,"@CollegeID",DbType.Int32,"CollegeID",DataRowVersion.Current);
DbCommandupdateCommand=db.GetStoredProcCommand("usp_College_Update");
db.AddInParameter(updateCommand,"@CollegeID",DbType.Int32,"CollegeID",DataRowVersion.Current);
db.AddInParameter(updateCommand,"@Name",DbType.String,"Name",DataRowVersion.Current);
//通过DataSet更新数据库
introwsAffected=db.UpdateDataSet(productsDataSet,CollegeTableName,insertCommand,updateCommand,deleteCommand,
Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard);
MessageBox.Show("影响的行数:
"+rowsAffected);
}
(7) 返回值XML化.
///
///返回值XML化
///
privatevoidReturnXML_Click(objectsender,EventArgse)
{
//使用"FORXMLAUTO"参数使得SQL返回XML格式的信息
SqlDatabasesqldb=(SqlDatabase)DatabaseFactory.CreateDatabase("ConnectionString");
DbCommandcmd=sqldb.GetSqlStringCommand("SELECT*FROMCollegeFORXMLAUTO");
IEnumerable
using(varreader=sqldb.ExecuteXmlReader(cmd))
{
if(reader.IsStartElement())
{
varroot=(XElement)XNode.ReadFrom(reader);
productList=root.Elements("CollegeID")
.Attributes("Name")
.Select(a=>a.Value).ToArray();
MessageBox.Show(((XElement)root).ToString());
}
}
}
(8) 将返回的数据对象化.
///
///DataAsObject
///
privatevoidDataAsObject_Click(objectsender,EventArgse)
{
//将返回的数据对象化
varresults=db.ExecuteSprocAccessor
MessageBox.Show(results.ElementAt(0).ToString());
}
(9) 异步访问数据库.
///
///异步访问数据库
///
privatevoidAsync_Click(objectsender,EventArgse)
{
//创建新的数据库连接,属性必须添加:
AsynchronousProcessing=true
StringconnectionString=@"server=(local);database=TestDB;IntegratedSecurity=true;AsynchronousProcessing=true";
DatabaseSqldb=newSqlDatabase(connectionString);
DbCommandcmd=Sqldb.GetStoredProcCommand("usp_College_LoadbyID");
Sqldb.AddInParameter(cmd,"@CollegeID",DbType.Int32,1);
try
{
IAsyncResultresult=Sqldb.BeginExecuteReader(cmd,MyEndExecuteCallback,Sqldb);
}
catch(Exceptionex)
{
MessageBox.Show(ex.ToString());
}
}
//当获取完毕执行该函数
privatevoidMyEndExecuteCallback(IAsyncResultresult)
{
try
{
DatabaseSqldb=(Database)result.AsyncState;
IDataReaderreader=db.EndExecuteReader(result);
Collegec=newCollege((int)reader[0],(string)reader[1]);
MessageBox.Show(c.ToString());
}
catch(Exceptionex)
{
MessageBox.Show(ex.ToString());
}
}
///
///执行ExecuteDataSet,返回College列表
///
///
privatevoidExecuteDataSet_Click(objectsender,EventArgse)
{
stringsql="select*fromCollege";
DbCommanddw=db.GetSqlStringCommand(sql);
dataGridView1.DataSource=db.ExecuteDataSet(dw).Tables[0];
}
企业库5.0的下载地址:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 企业库 进行 数据 操作