2024年4月8日发(作者:)
【精编推荐】
EnterpriseLibrary企
业库常用办法
Enterprise Library 2.0 --企业库常用方法
下面我们重点来说一下DataAccess Application Block操作数据库
的方法。
1、创建一个数据库实例DataBase
//创建一个默认的数据库实例
Database defaultdb = Database();
//创建一个名为Connection String的数据库实例
Database db = Database("Connection St
ring");
//上面两种创建数据库实例的方法的数据库可以是任何类型的数据
库,取决于Config文件中的配置信息
//下面的这种方面展示了创建一个SQL数据库的实例,需引用Micros
程序集
SqlDatabase dbsql = Database("Connect
ion String") as SqlDatabase;
//我们同样也可以不通过配置文件来创建数据库实例,如下
string connString = "server=.;database=EnterpriseLibrary;ui
d=sa;pwd=";
SqlDatabase nocofigdb = new SqlDatabase(connString);
2、创建DbCommand
DbCommand的创建方式有两种:一种是为了调用存储过程创建,一种
是为了执行一般的SQL语句而创建,具体用哪一种方式,就要看你需
要执行的是存储过程还是SQL语句了。
//创建一个SQL语句的DbCommand
Database db = Database();
string sql = "Select * from person";
DbCommand Sqldbcomm = StringCommand(sql);
//创建一个存储过程的DbCommand
//存储过程名称为GetAllPersonByName
string procName = "GetAllPersonByName";
DbCommand Procdbcomm = redProcCommand(procName);
3、存储过程中的参数处理
DataBase类中包含多种传递存储过程参数的方法,也包含了得到和
设置参数值的方法,如下:
AddParameter. 为存储过程传递一个参数(输入型或输出型)
AddInParameter. 为存储过程传递一个输入型参数
AddOutParameter. 为存储过程传递一个输出型参数
GetParameterValue. 获取某存储过程指定参数的值
SetParameterValue. 为存储过程的某个参数赋值,当你需要用同一
个方法来执行插入多条记录时,就可参数给参数赋值的方法来进行
//创建一个存储过程的DbCommand
//存储过程名称为GetAllPersonByName
string procName = "GetAllPersonByName";
DbCommand Procdbcomm = redProcCommand(procName);
//添加一个输入型的参数
arameter(Procdbcomm, "@sex", );
//添加一个输出型的参数
Parameter(Procdbcomm, "@name", ,20);
//设置参数的值
ameterValue(Procdbcomm, "@sex", "男");
//执行存储过程
eNonQuery(Procdbcomm);
//得到输出参数的值,注意转化返回值类型
string outvalue = (string) ameterValue(Procdbcomm,
"@name");
4、执行ExecuteReader方法返回一个IDataReader类型的数据集
因为ExecuteReader方法在一开始执行时就打开了一个与数据库的
连接,所以我们必须注意在使用结束时关闭连接,而用using(){}语
句块就能确保ExecuteReader方法在执行完毕时关闭与数据库的连
接。
什么时候使用此方法:
返回的数据仅仅用来显示,并不对其进行修改,删除等操作;
绑定返回的数据到WebForm Control
不需要缓存返回的数据,用完就释放
using (IDataReader reader = eReader(
xt, "select * from person"))
{
urce = reader;
nd();
}
5、执行ExecuteDataSet方法返回一个DataSet
public DataSet GetPersonList()
{
Database db = Database();
DbCommand dbcomm = StringCommand("select * from pe
rson");
return eDataSet(dbcomm);
}
什么时候使用此方法:
需要返回多表数据;
如果你需要逐一访问数据库的每一条记录,这个时候如果使用DataR
eader的话,则会使与数据库的连接一直处于打开的状态,长此以往,
就会使应用程序的性能和可伸缩性大大降低;
需要和其他的应用程序交换数据;
6、执行ExecuteNonQuery
该方法返回的是SQL语句执行影响的行数,我们可以利用该方法来执
行一些没有返回值的操作(Insert,Update,Delete)
public void AddPerson()
{
Database db = Database();
DbCommand dbcomm = StringCommand("insert into pers
on values(1,'shy','女','123456')");
eNonQuery(dbcomm);
}
7、执行ExecuteScalar返回单值
public string GetPersonName()
{
Database db = Database();
DbCommand dbcomm = StringCommand("select name from
person");
return (string)eScalar(dbcomm);
}
8、事务处理
public void UseTransaction()
{
Database db = Database();
DbCommand dbcomm1 = StringCommand("update person s
et name='pw'");
DbCommand dbcomm2 = StringCommand("delete from per
son where id=1");
using (DbConnection conn = Connection())
{
//打开连接
();
//创建事务
DbTransaction trans = ransaction();
try
{
eNonQuery(dbcomm1);
eNonQuery(dbcomm2);
//都执行成功则提交事务
();
}
catch(Exception)
{
//发生异常,事务回滚
ck();
}
//关闭连接
();
}
}
9、执行ExecuteXmlReader返回XML数据
支持Sql Server 2000 及以后版本的数据库,对微软以外的数据库
应该不支持。
public void UseXMLReader()
{
SqlDatabase dbSQL = Database("Connect
ion String") as SqlDatabase;
// 要返回XML数据需要在SQL语句后加 FOR XML AUTO
string sqlCommand = "SELECT ProductID, ProductName FROM Pro
ducts FOR XML AUTO";
DbCommand dbCommand = StringCommand(sqlCommand);
XmlReader personReader = null;
StringBuilder personlist = new StringBuilder();
try
{
personReader = eXmlReader(dbCommand);
// 循环向XML中写入我们查询得到的数据
while (!)
{
if (tElement())
{
(terXml());
(e);
}
}
}
finally
{
// 关闭 Reader.
if (personReader != null)
{
();
}
// 关闭数据库连接
if (tion != null)
{
();
}
}
}
10、用DataSet批量的添加,修改,删除数据
public void UpdateDataBase()
{
Database db = Database();
DataSet personDataSet = new DataSet();
string sqlCommand = "Select * from person";
DbCommand dbCommand = StringCommand(sqlCommand);
string personTable = "person";
// 得到初始化数据
taSet(dbCommand, personDataSet, personTable);
// 得到未修改前的数据集
DataTable table = [personTable];
// 往DataSet中添加一行数据
DataRow addedRow = (new object[] { 18, "New
person", "男", "654321" });
// 修改
[0]["ProductName"] = "Modified product";
// 下面分别创建添加,修改,删除的操作
DbCommand insertCommand = redProcCommand("AddPers
on");
arameter(insertCommand, "Name", , "Na
me", t);
arameter(insertCommand, "Sex", , "Sex
", t);
arameter(insertCommand, "ID", 32, "ID",
t);
DbCommand deleteCommand = redProcCommand("DeleteP
erson");
arameter(deleteCommand, "ID", 32, "ID",
t);
DbCommand updateCommand = redProcCommand("UpdateP
erson");
arameter(updateCommand, "Name", , "Na
me", t);
arameter(updateCommand, "Sex", , "Sex
", t);
arameter(insertCommand, "ID", 32, "ID",
t);
// 提交对DataSet的修改,并返回影响的行数
int rowsAffected = DataSet(productsDataSet, "Prod
ucts",
insertCommand, updateCommand, deleteCommand
, Micros
rd);
}
//-->
Enterprise Library2.0数据库常用操作2(不同版本的解释)
今天学习了Enterprise Library2.0的Data Access Applicati
on Block,Data Access Application Block提供了通用的数据访问
的功能,随着2.0版本的推出有了很大变化。俺就多写了对SQL和A
CCESS数据库自由切换的一些代码出来共享。先看完原文再接俺的代
码吧。
一.改进
在DAAB1.1里面我们知道Database方法返回或者创建一个DBCo
mmandWrapper对象,而在DAAB2.0里面移除了DBCommandWrapper类,
用2.0里面的DBCommand类代替实现类似的功能,这样使得
DAAB跟我们的.NET类库的结合更加紧密,回忆一下我们在1.1里面
用DBCommandWrapper来访问数据时的代码:
二.使用示例
Database db = Database();
DBCommandWrapper dbCommand = redProcCommandWr
apper("GetProductsByCategory");
arameter("CategoryID", 32, C
ategory);
DataSet productDataSet = eDataSet(dbCommand);
而用了新的DBCommand类之后则变成了:
Database db = Database();
DbCommand dbCommand = redProcCommand("GetProd
uctsByCategory");
arameter(dbCommand, "CategoryID", 3
2, Category);
DataSet productDataSet = eDataSet(dbCommand);
数据库连接字符串在我们基于数据库的开发永远是少不了的,但
是在DAAB1.1下,它所使用的字符串跟我们在.NET类库中使用的连
接字符串却是不能共享的,它们分别保存在不同的位置。而在2.0的
Data Access Application Block使用了2.0里面 ionStrings>配置区,这样带来的一个好处是连接字符串可以在Appl ication Block和自定义的.NET类之间共享使用该配置区,如: name="DataAccessQuickStart" providerName="ent" connectionString="server=(local)SQLEXPRESS;da tabase=EntLibQuickStarts;Integrated Security=true" /> 在.NET2.0下,泛型编程已经成为了一个核心,而2.0版的DAAB 中也新增了一个GenericDatabase对象。DAAB中虽然已经包含了Sq lDatabase和OrcaleDatabase,但是如果我们需要使用其他的像DB2 等数据库时,就需要用到GenericDatabase,它可以用于任何.NET 类库中的数据提供者,包括OdbcProvider和OleDbProvider。 DAAB2.0的配置非常简单,主要有以下几方面的配置: 配置连接字符串 配置默认数据库


发布评论