推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx

上传人:b****7 文档编号:23332356 上传时间:2023-05-16 格式:DOCX 页数:23 大小:106.22KB
下载 相关 举报
推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx_第1页
第1页 / 共23页
推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx_第2页
第2页 / 共23页
推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx_第3页
第3页 / 共23页
推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx_第4页
第4页 / 共23页
推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx

《推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx》由会员分享,可在线阅读,更多相关《推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx(23页珍藏版)》请在冰豆网上搜索。

推荐下载EnterpriseLibrary 20企业库常用方法 精品.docx

推荐下载EnterpriseLibrary20企业库常用方法精品

EnterpriseLibrary2.0--企业库常用方法

下面我们重点来说一下DataAccessApplicationBlock操作数据库的方法。

1、创建一个数据库实例DataBase

//创建一个默认的数据库实例

Databasedefaultdb=DatabaseFactory.CreateDatabase();

//创建一个名为ConnectionString的数据库实例

Databasedb=DatabaseFactory.CreateDatabase("ConnectionString");

//上面两种创建数据库实例的方法的数据库可以是任何类型的数据库,取决于Config文件中的配置信息

//下面的这种方面展示了创建一个SQL数据库的实例,需引用Microsoft.Practices.EnterpriseLibrary.Data.Sql程序集

SqlDatabasedbsql=DatabaseFactory.CreateDatabase("ConnectionString")asSqlDatabase;

//我们同样也可以不通过配置文件来创建数据库实例,如下

stringconnString="server=.;database=EnterpriseLibrary;uid=sa;pwd=";

SqlDatabasenocofigdb=newSqlDatabase(connString);

2、创建Dbmand

Dbmand的创建方式有两种:

一种是为了调用存储过程创建,一种是为了执行一般的SQL语句而创建,具体用哪一种方式,就要看你需要执行的是存储过程还是SQL语句了。

//创建一个SQL语句的Dbmand

Databasedb=DatabaseFactory.CreateDatabase();

stringsql="Select*fromperson";

DbmandSqldbm=db.GetSqlStringmand(sql);

//创建一个存储过程的Dbmand

//存储过程名称为GetAllPersonByName

stringproame="GetAllPersonByName";

DbmandProcdbm=db.GetStoredProcmand(proame);

3、存储过程中的参数处理

DataBase类中包含多种传递存储过程参数的方法,也包含了得到和设置参数值的方法,如下:

AddParameter.为存储过程传递一个参数(输入型或输出型)

AddInParameter.为存储过程传递一个输入型参数

AddOutParameter.为存储过程传递一个输出型参数

GetParameterValue.获取某存储过程指定参数的值

SetParameterValue.为存储过程的某个参数赋值,当你需要用同一个方法来执行插入多条记录时,就可参数给参数赋值的方法来进行

//创建一个存储过程的Dbmand

//存储过程名称为GetAllPersonByName

stringproame="GetAllPersonByName";

DbmandProcdbm=db.GetStoredProcmand(proame);

//添加一个输入型的参数

db.AddInParameter(Procdbm,"@sex",DbType.String);

//添加一个输出型的参数

db.AddOutParameter(Procdbm,"@name",DbType.String,20);

//设置参数的值

db.SetParameterValue(Procdbm,"@sex","男");

//执行存储过程

db.ExecuteNonQuery(Procdbm);

//得到输出参数的值,注意转化返回值类型

stringoutvalue=(string)db.GetParameterValue(Procdbm,"@name");

4、执行ExecuteReader方法返回一个IDataReader类型的数据集

因为ExecuteReader方法在一开始执行时就打开了一个与数据库的连接,所以我们必须注意在使用结束时关闭连接,而用using(){}语句块就能确保ExecuteReader方法在执行完毕时关闭与数据库的连接。

什么时候使用此方法:

返回的数据仅仅用来显示,并不对其进行修改,删除等操作;

绑定返回的数据到WebFormControl

不需要缓存返回的数据,用完就释放

using(IDataReaderreader=db.ExecuteReader(mandType.Text,"select*fromperson"))

{

DataGrid1.DataSource=reader;

DataGrid1.DataBind();

}

5、执行ExecuteDataSet方法返回一个DataSet

publicDataSetGetPersonList()

{

Databasedb=DatabaseFactory.CreateDatabase();

Dbmanddbm=db.GetSqlStringmand("select*fromperson");

returndb.ExecuteDataSet(dbm);

}

什么时候使用此方法:

需要返回多表数据;

如果你需要逐一访问数据库的每一条记录,这个时候如果使用DataReader的话,则会使与数据库的连接一直处于打开的状态,长此以往,就会使应用程序的性能和可伸缩性大大降低;

需要和其他的应用程序交换数据;

6、执行ExecuteNonQuery

该方法返回的是SQL语句执行影响的行数,我们可以利用该方法来执行一些没有返回值的操作(Insert,Update,Delete)

publicvoidAddPerson()

{

Databasedb=DatabaseFactory.CreateDatabase();

Dbmanddbm=db.GetSqlStringmand("insertintopersonvalues(1,'shy','女','123456')");

db.ExecuteNonQuery(dbm);

}

7、执行ExecuteScalar返回单值

publicstringGetPersonName()

{

Databasedb=DatabaseFactory.CreateDatabase();

Dbmanddbm=db.GetSqlStringmand("selectnamefromperson");

return(string)db.ExecuteScalar(dbm);

}

8、事务处理

publicvoidUseTransaction()

{

Databasedb=DatabaseFactory.CreateDatabase();

Dbmanddbm1=db.GetSqlStringmand("updatepersonsetname='pw'");

Dbmanddbm2=db.GetSqlStringmand("deletefrompersonwhereid=1");

using(DbConnectionconn=db.CreateConnection())

{

//打开连接

conn.Open();

//创建事务

DbTransactiontrans=conn.BeginTransaction();

try

{

db.ExecuteNonQuery(dbm1);

db.ExecuteNonQuery(dbm2);

//都执行成功则提交事务

trans.mit();

}

catch(Exception)

{

//发生异常,事务回滚

trans.Rollback();

}

//关闭连接

conn.Close();

}

}

9、执行ExecuteXmlReader返回XML数据

支持SqlServer2000及以后版本的数据库,对微软以外的数据库应该不支持。

publicvoidUseXMLReader()

{

SqlDatabasedbSQL=DatabaseFactory.CreateDatabase("ConnectionString")asSqlDatabase;

//要返回XML数据需要在SQL语句后加FORXMLAUTO

stringsqlmand="SELECTProductID,ProductNameFROMProductsFORXMLAUTO";

Dbmanddbmand=dbSQL.GetSqlStringmand(sqlmand);

XmlReaderpersonReader=null;

StringBuilderpersonlist=newStringBuilder();

try

{

personReader=dbSQL.ExecuteXmlReader(dbmand);

//循环向XML中写入我们查询得到的数据

while(!

personReader.EOF)

{

if(personReader.IsStartElement())

{

personlist.Append(personReader.ReadOuterXml());

personlist.Append(Environment.NewLine);

}

}

}

finally

{

//关闭Reader.

if(personReader!

=null)

{

personReader.Close();

}

//关闭数据库连接

if(dbmand.Connection!

=null)

{

dbmand.Connection.Close();

}

}

}

10、用DataSet批量的添加,修改,删除数据

publicvoidUpdateDataBase()

{

Databasedb=DatabaseFactory.CreateDatabase();

DataSetpersonDataSet=newDataSet();

stringsqlmand="Select*fromperson";

Dbmanddbmand=db.GetSqlStringmand(sqlmand);

stringpersonTable="person";

//得到初始化数据

db.LoadDataSet(dbmand,personDataSet,personTable);

//得到未修改前的数据集

DataTabletable=personDataSet.Tables[personTable];

//往DataSet中添加一行数据

DataRowaddedRow=table.Rows.Add(newobject[]{18,"Newperson","男","654321"});

//修改

table.Rows[0]["ProductName"]="Modifiedproduct";

//下面分别创建添加,修改,删除的操作

Dbmandinsertmand=db.GetStoredProcmand("AddPerson");

db.AddInParameter(insertmand,"Name",DbType.String,"Name",DataRowVersion.Current);

db.AddInParameter(insertmand,"Sex",DbType.String,"Sex",DataRowVersion.Current);

db.AddInParameter(insertmand,"ID",DbType.Int32,"ID",DataRowVersion.Current);

Dbmanddeletemand=db.GetStoredProcmand("DeletePerson");

db.AddInParameter(deletemand,"ID",DbType.Int32,"ID",DataRowVersion.Current);

Dbmandupdatemand=db.GetStoredProcmand("UpdatePerson");

db.AddInParameter(updatemand,"Name",DbType.String,"Name",DataRowVersion.Current);

db.AddInParameter(updatemand,"Sex",DbType.String,"Sex",DataRowVersion.Current);

db.AddInParameter(insertmand,"ID",DbType.Int32,"ID",DataRowVersion.Current);

//提交对DataSet的修改,并返回影响的行数

introwsAffected=db.UpdateDataSet(productsDataSet,"Products",insertmand,updatemand,deletemand,Microsoft.Practices.EnterpriseLibrary.Data.UpdateBehavior.Standard);

}

//-->

EnterpriseLibrary2.0数据库常用操作2(不同版本的解释)

今天学习了EnterpriseLibrary2.0的DataAccessApplicationBlock,DataAccessApplicationBlock提供了通用的数据访问的功能,随着2.0版本的推出有了很大变化。

俺就多写了对SQL和ACCESS数据库自由切换的一些代码出来共享。

先看完原文再接俺的代码吧。

一.改进

在DAAB1.1里面我们知道Database方法返回或者创建一个DBmandWrapper对象,而在DAAB2.0里面移除了DBmandWrapper类,用ADO.NET2.0里面的DBmand类代替实现类似的功能,这样使得DAAB跟我们的.NET类库的结合更加紧密,回忆一下我们在1.1里面用DBmandWrapper来访问数据时的代码:

二.使用示例

Databasedb=DatabaseFactory.CreateDatabase();

DBmandWrapperdbmand=db.GetStoredProcmandWrapper("GetProductsByCategory");

dbmand.AddInParameter("CategoryID",DbType.Int32,Category);

DataSetproductDataSet=db.ExecuteDataSet(dbmand);

而用了新的DBmand类之后则变成了:

Databasedb=DatabaseFactory.CreateDatabase();

Dbmanddbmand=db.GetStoredProcmand("GetProductsByCategory");

db.AddInParameter(dbmand,"CategoryID",DbType.Int32,Category);

DataSetproductDataSet=db.ExecuteDataSet(dbmand);

数据库连接字符串在我们基于数据库的开发永远是少不了的,但是在DAAB1.1下,它所使用的字符串跟我们在.NET类库中使用的连接字符串却是不能共享的,它们分别保存在不同的位置。

而在2.0的DataAccessApplicationBlock使用了ADO.NET2.0里面配置区,这样带来的一个好处是连接字符串可以在ApplicationBlock和自定义的.NET类之间共享使用该配置区,如:

        

            name="DataAccessQuickStart"

            providerName="System.Data.SqlClient"

            connectionString="server=(local)\SQLEXPRESS;database=EntLibQuickStarts;IntegratedSecurity=true"/>

在.NET2.0下,泛型编程已经成为了一个核心,而2.0版的DAAB中也新增了一个GenericDatabase对象。

DAAB中虽然已经包含了SqlDatabase和OrcaleDatabase,但是如果我们需要使用其他的像DB2等数据库时,就需要用到GenericDatabase,它可以用于任何.NET类库中的数据提供者,包括OdbcProvider和OleDbProvider。

DAAB2.0的配置非常简单,主要有以下几方面的配置:

配置连接字符串

配置默认数据库

添加相关的命名空间:

usingMicrosoft.Practices.EnterpriseLibrary.Data;

usingSystem.Data;

使用DataAccessApplicationBlock进行数据的读取和操作,一般分为三步:

1.创建Database对象

2.提供命令参数,如果需要的话

3.执行命令

下面分别看一下DataAccessQuickStart中提供的一些例子:

执行静态的SQL语句

publicstringGetCustomerList()

{

//创建Database对象

Databasedb=DatabaseFactory.CreateDatabase();

//使用SQL语句创建Dbmand对象

stringsqlmand="SelectCustomerID,Name,Address,City,Country,PostalCode"+

   "FromCustomers";

Dbmanddbmand=db.GetSqlStringmand(sqlmand);

StringBuilderreaderData=newStringBuilder();

//调用ExecuteReader方法

using(IDataReaderdataReader=db.ExecuteReader(dbmand))

{

   while(dataReader.Read())

   {

       //Getthevalueofthe'Name'columnintheDataReader

       readerData.Append(dataReader["Name"]);

       readerData.Append(Environment.NewLine);

   }

}

returnreaderData.ToString();

}

执行存储过程并传递参数,返回DataSet

publicDataSetGetProductsInCategory(intCategory)

{

   //CreatetheDatabaseobject,usingthedefaultdatabaseservice.The

   //defaultdatabaseserviceisdeterminedthroughconfiguration.

   Databasedb=DatabaseFactory.CreateDatabase();

   stringsqlmand="GetProductsByCategory";

   Dbmanddbmand=db.GetStoredProcmand(sqlmand);

   //Retrieveproductsfromthespecifiedcategory.

   db.AddInParameter(dbmand,"CategoryID",DbType.Int32,Category);

   //DataSetthatwillholdthereturnedresults        

   DataSetproductsDataSet=null;

   productsDataSet=db.ExecuteDataSet(dbmand);

   //Note:

connectionwasclosedbyExecuteDataSetmethodcall

   returnproductsDataSet;

}

利用DataSet更新数据

publicintUpdateProducts()

{

   //CreatetheDatabaseobject,usingthedefaultdatabaseservice.The

   //defaultdatabaseserviceisdeterminedthroughconfiguration.

   Databasedb=DatabaseFactory.CreateDatabase();

   DataSetproductsDataSet=newDataSet();

   stringsqlmand="SelectProductID,ProductName,CategoryID,UnitPrice,LastUpdate"+

       "FromProducts";

   Dbmanddbmand=db.GetSqlStringmand(sqlmand);

   stringproductsTable="Products";

   //Retrievetheinitialdata

   db.LoadDataSet(dbmand,productsDataSet,productsTable);

   //Getthetablethatwillbemodified

   DataTabletable=productsDataSet.Tables[productsTable];

   //

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1