`
isiqi
  • 浏览: 16041943 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Microsoft.Practices.EnterpriseLibrary.Data--使用存储过程,参数及事务

阅读更多

一. 使用存储过程:

关于数据访问应用程序块的介绍在入门篇里面已经说过了,这里不再重复。下面我们来看看在数据访问应用程序块里面使用存储过程的方法:

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 }

Microsoft.Practices.EnterpriseLibrary.Data 数据库操作

  1. Databasedb=null;
  2. #region一般调用
  3. db=DatabaseFactory.CreateDatabase("ConnectionString");
  4. intcount=(int)db.ExecuteScalar(CommandType.Text,"SELECTCount(*)Fromcms_company");
  5. stringmessage=string.Format("Thereare{0}customersinthedatabase",count.ToString());
  6. Response.Write(message);
  7. #endregion
  8. #region带返回参数,返回值和返回数据集,一般参数的存储过程
  9. //CREATEPROCEDURE[dbo].[kword]
  10. //@kwordvarchar(250)='',
  11. //@topint,
  12. //@otopvarchar(250)output
  13. //As
  14. //selecttop10*fromTable1wherentitlelike'%'+@kword+'%'andid>@top
  15. //declare@flagint
  16. //select@flag=100
  17. //SET@otop='返回值'
  18. //return@flag
  19. db=DatabaseFactory.CreateDatabase("serverConnectionString");//连接字符串变量名
  20. DbCommanddbcomm=db.GetStoredProcCommand("kword");//存储过程名
  21. db.AddInParameter(dbcomm,"@kword",DbType.String,"创业");//参数名类型值
  22. db.AddInParameter(dbcomm,"top",DbType.Int32,2);//参数名类型值
  23. db.AddOutParameter(dbcomm,"otop",DbType.String,250);//output参数名类型长度
  24. //关键在这里,添加一个参数@RETURN_VALUE类型为ReturnValue
  25. db.AddParameter(dbcomm,"@RETURN_VALUE",DbType.String,ParameterDirection.ReturnValue,"",DataRowVersion.Current,null);
  26. DataSetds=db.ExecuteDataSet(dbcomm);//必须有执行的动作后面才能获取值
  27. //title=(string)db.ExecuteScalar(dbcomm);如果返回只有一个数据,这样也是可以的
  28. GridView1.DataSource=ds;
  29. GridView1.DataBind();
  30. Response.Write("<br>output输出参数值:"+db.GetParameterValue(dbcomm,"otop").ToString());
  31. //inttestvalue=(int)dbcomm.Parameters["@RETURN_VALUE"].Value;//另一种获取值的方式
  32. Response.Write("<br/>return返回参数值:"+db.GetParameterValue(dbcomm,"RETURN_VALUE").ToString());
  33. #endregion
  34. #region使用事务记录操作数据库
  35. //CREATETABLE[dbo].[Table1](
  36. //[id][int]IDENTITY(1,1)NOTNULL,
  37. //[ntitle][varchar](250)NOTNULL,
  38. //[valuea][varchar](250)NULL,
  39. //CONSTRAINT[PK_Table1]PRIMARYKEYCLUSTERED
  40. //(
  41. //[ntitle]ASC
  42. //)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
  43. //)ON[PRIMARY]
  44. db=DatabaseFactory.CreateDatabase("serverConnectionString");
  45. using(IDbConnectionconn=db.CreateConnection())
  46. {
  47. conn.Open();
  48. IDbTransaction_trans=conn.BeginTransaction();
  49. try
  50. {
  51. DbCommand_cmd=db.GetSqlStringCommand("INSERTINTO[Table1]([ntitle],[valuea])VALUES(@ntitle,@valuea)");
  52. db.AddInParameter(_cmd,"ntitle",DbType.String,"AA");
  53. db.AddInParameter(_cmd,"valuea",DbType.String,"AA");
  54. db.ExecuteNonQuery(_cmd,_transasDbTransaction);
  55. db.ExecuteNonQuery(_cmd,_transasDbTransaction);//ntitle字段上建有唯一索引,故第二次插入同样记录时会报错
  56. _trans.Commit();
  57. }
  58. catch
  59. {
  60. try
  61. {
  62. _trans.Rollback();//事务提交失败时,则回滚(是否回滚成功,可查看表中有无AA的记录即可)
  63. }
  64. catch{}
  65. }
  66. finally
  67. {
  68. conn.Close();
  69. }
  70. }
  71. #endregion
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics