一. 使用存储过程:
关于数据访问应用程序块的介绍在入门篇里面已经说过了,这里不再重复。下面我们来看看在数据访问应用程序块里面使用存储过程的方法:
1. 不传递参数:不传递参数时值需要指定存储过程的名称,已经命令的类型即可。
1/**//// <summary>
2 /// 执行存储过程(1)——不传递参数(NoPara)
3 /// </summary>
4 private void FormatDataBySp1()
5 {
6 /**////创建数据库实例
7 Database db = DatabaseFactory.CreateDatabase("NorthWind");
8
9 /**////传递参数
10 DbCommand dbc = db.GetStoredProcCommand("GetProductsList");
11
12 /**////执行存储过程
13 DataSet ds = db.ExecuteDataSet(dbc);
14
15 /**////绑定数据
16 DataGrid1.DataSource = ds.Tables[0];
17 DataGrid1.DataBind();
18 }
2. 传递输入参数:需要注意的是在增加参数时是AddInParameter。
1/**//// <summary>
2 /// 执行存储过程(2)——传递输入参数(Input)
3 /// </summary>
4 private void FormatDataBySp2()
5 {
6 /**////创建数据库实例
7 Database db = DatabaseFactory.CreateDatabase("NorthWind");
8
9 /**////传递参数
10 DbCommand dbc = db.GetStoredProcCommand("CustOrdersDetail");
11 dbc.AddInParameter("@OrderID",System.Data.DbType.Int32,10248);
12
13 /**////执行存储过程
14 DataSet ds = db.ExecuteDataSet(dbc);
15
16 /**////绑定数据
17 DataGrid1.DataSource = ds.Tables[0];
18 DataGrid1.DataBind();
19 }
3. 传递输出参数:需要注意的是在增加参数时是AddOutParameter。
1/**//// <summary>
2 /// 执行存储过程(3)——传递输出参数(Output)
3 /// </summary>
4 private void FormatDataBySp3()
5 {
6 /**////创建数据库实例
7 Database db = DatabaseFactory.CreateDatabase("NorthWind");
8
9 /**////传递参数
10 DbCommand dbc = db.GetStoredProcCommand("GetProductDetails");
11
12 dbc.AddInParameter("@ProductID",System.Data.DbType.Int32,12);
13 dbc.AddOutParameter("@ProductName",System.Data.DbType.String,50); //输出
14
15 /**////执行存储过程
16 db.ExecuteNonQuery(dbc);
17
18 string result = dbc.GetParameterValue("@ProductName").ToString(); //得到输出参数的值
19 }
二. 使用事务:
在企业库数据访问应用程序块里面,对事务提供了很好的支持,具体的使用方法在程序里面有注释,这里就不多说了。
1/**//// <summary>
2 /// 利用事务更改数据
3 /// </summary>
4 private void ExecuteUseTran()
5 {
6 /**////创建数据库实例
7 Database db = DatabaseFactory.CreateDatabase("NorthWind");
8
9 using(IDbConnection Idbconn = db.GetConnection())
10 {
11 /**////打开连接
12 Idbconn.Open();
13
14 /**////创建事务
15 IDbTransaction Idbtran = Idbconn.BeginTransaction();
16
17 try
18 {
19 /**////执行两个存储过程
20 db.ExecuteNonQuery(CommandType.StoredProcedure,"InserOrders");
21 db.ExecuteDataSet(CommandType.StoredProcedure,"UpdateProducts");
22
23 /**////执行完成后提交事务
24 Idbtran.Commit();
25 }
26 catch
27 {
28 /**////回滚事务
29 Idbtran.Rollback();
30 }
31 finally
32 {
33 /**////关闭连接
34 Idbconn.Close();
35 }
36 }
37
38 }
-
Databasedb=null;
-
-
#region一般调用
- db=DatabaseFactory.CreateDatabase("ConnectionString");
-
intcount=(int)db.ExecuteScalar(CommandType.Text,"SELECTCount(*)Fromcms_company");
-
stringmessage=string.Format("Thereare{0}customersinthedatabase",count.ToString());
- Response.Write(message);
-
#endregion
-
-
-
#region带返回参数,返回值和返回数据集,一般参数的存储过程
-
//CREATEPROCEDURE[dbo].[kword]
-
//@kwordvarchar(250)='',
-
//@topint,
-
//@otopvarchar(250)output
-
//As
-
//selecttop10*fromTable1wherentitlelike'%'+@kword+'%'andid>@top
-
//declare@flagint
-
//select@flag=100
-
//SET@otop='返回值'
-
//return@flag
- db=DatabaseFactory.CreateDatabase("serverConnectionString");//连接字符串变量名
- DbCommanddbcomm=db.GetStoredProcCommand("kword");//存储过程名
- db.AddInParameter(dbcomm,"@kword",DbType.String,"创业");//参数名类型值
- db.AddInParameter(dbcomm,"top",DbType.Int32,2);//参数名类型值
- db.AddOutParameter(dbcomm,"otop",DbType.String,250);//output参数名类型长度
-
//关键在这里,添加一个参数@RETURN_VALUE类型为ReturnValue
- db.AddParameter(dbcomm,"@RETURN_VALUE",DbType.String,ParameterDirection.ReturnValue,"",DataRowVersion.Current,null);
- DataSetds=db.ExecuteDataSet(dbcomm);//必须有执行的动作后面才能获取值
-
//title=(string)db.ExecuteScalar(dbcomm);如果返回只有一个数据,这样也是可以的
- GridView1.DataSource=ds;
- GridView1.DataBind();
-
- Response.Write("<br>output输出参数值:"+db.GetParameterValue(dbcomm,"otop").ToString());
-
//inttestvalue=(int)dbcomm.Parameters["@RETURN_VALUE"].Value;//另一种获取值的方式
- Response.Write("<br/>return返回参数值:"+db.GetParameterValue(dbcomm,"RETURN_VALUE").ToString());
-
#endregion
-
-
-
-
#region使用事务记录操作数据库
-
//CREATETABLE[dbo].[Table1](
-
//[id][int]IDENTITY(1,1)NOTNULL,
-
//[ntitle][varchar](250)NOTNULL,
-
//[valuea][varchar](250)NULL,
-
//CONSTRAINT[PK_Table1]PRIMARYKEYCLUSTERED
-
//(
-
//[ntitle]ASC
-
//)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
-
//)ON[PRIMARY]
- db=DatabaseFactory.CreateDatabase("serverConnectionString");
-
using(IDbConnectionconn=db.CreateConnection())
- {
- conn.Open();
- IDbTransaction_trans=conn.BeginTransaction();
-
try
- {
- DbCommand_cmd=db.GetSqlStringCommand("INSERTINTO[Table1]([ntitle],[valuea])VALUES(@ntitle,@valuea)");
- db.AddInParameter(_cmd,"ntitle",DbType.String,"AA");
- db.AddInParameter(_cmd,"valuea",DbType.String,"AA");
- db.ExecuteNonQuery(_cmd,_transasDbTransaction);
- db.ExecuteNonQuery(_cmd,_transasDbTransaction);//ntitle字段上建有唯一索引,故第二次插入同样记录时会报错
- _trans.Commit();
- }
-
catch
- {
-
try
- {
- _trans.Rollback();//事务提交失败时,则回滚(是否回滚成功,可查看表中有无AA的记录即可)
- }
-
catch{}
- }
-
finally
- {
- conn.Close();
- }
- }
-
#endregion
分享到:
相关推荐
Microsoft.Practices.EnterpriseLibrary.Data.dll Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.ObjectBuilder.dll
Microsoft Enterprise Library January 2006,支持mysql。 Microsoft.Practices.EnterpriseLibrary.Data.dll。 可用于.net框架2.0。
包括各种Microsoft.Practices.EnterpriseLibrary.Common.dll的版本,如Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ContainerModel等
下载后可直接复制到系统根目录下,添加引用后直接调用
Microsoft.Practices.EnterpriseLibrary.Data示例
Microsoft.Practices.EnterpriseLibrary.Data.dll
Microsoft.Practices.EnterpriseLibrary.Data.dll Microsoft.Practices.EnterpriseLibrary.Data.SqlCe.dll Microsoft.Practices.ServiceLocation.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity....
包括 Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.EnterpriseLibrary.Data
Microsoft.Practices.EnterpriseLibrary连接Oracle简单例子
Microsoft.Practices.EnterpriseLibrary 版本的SqlHelper.cs
Microsoft.Practices.EnterpriseLibrary dll文件集
orcale数据库连接支持dll文件Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary5.0几个重要的Dll,微软.NET企业级开发库
使用微软企业类库Microsoft Enterprise Library4.0访问达梦数据库的源代码
Microsoft.Practices.Prism.dll
Microsoft.Practices.CompositeUI.Windows.dll )