您的位置:首页 > 其它

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

2014-04-04 10:31 609 查看
一. 使用存储过程:

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

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 数据库操作

Database db = null;  
       
      #region 一般调用  
      db = DatabaseFactory.CreateDatabase("Connection String");  
      int count = (int)db.ExecuteScalar(CommandType.Text, "SELECT Count(*) From cms_company");  
      string message = string.Format("There are {0} customers in the database", count.ToString());  
      Response.Write(message);  
      #endregion  
 
 
      #region 带返回参数,返回值和返回数据集,一般参数的存储过程  
      //CREATE PROCEDURE [dbo].[kword]  
      //@kword varchar(250)='',  
      //@top int,  
      //@otop varchar(250) output  
      //As  
      //select top 10 * from Table1 where ntitle like '%'+@kword+'%' and id>@top  
      //declare @flag int  
      //select @flag=100  
      //SET @otop='返回值'  
      //return @flag  
      db = DatabaseFactory.CreateDatabase("serverConnectionString");//连接字符串变量名  
      DbCommand dbcomm = 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);  
      DataSet ds = db.ExecuteDataSet(dbcomm);//必须有执行的动作后面才能获取值  
      //title = (string)db.ExecuteScalar(dbcomm);如果返回只有一个数据,这样也是可以的  
      GridView1.DataSource = ds;  
      GridView1.DataBind();  
  
      Response.Write("<br>output输出参数值:" + db.GetParameterValue(dbcomm, "otop").ToString());  
      // int testvalue = (int)dbcomm.Parameters["@RETURN_VALUE"].Value; //另一种获取值的方式  
      Response.Write("<br />return返回参数值:" + db.GetParameterValue(dbcomm, "RETURN_VALUE").ToString());  
      #endregion  
 
 
 
      #region 使用事务记录操作数据库  
      //CREATE TABLE [dbo].[Table1](  
      //    [id] [int] IDENTITY(1,1) NOT NULL,  
      //    [ntitle] [varchar](250) NOT NULL,  
      //    [valuea] [varchar](250) NULL,  
      // CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED   
      //(  
      //    [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 (IDbConnection conn = db.CreateConnection())  
      {  
          conn.Open();  
          IDbTransaction _trans = conn.BeginTransaction();  
          try  
          {  
              DbCommand _cmd = db.GetSqlStringCommand("INSERT INTO [Table1]([ntitle],[valuea]) VALUES(@ntitle,@valuea)");  
              db.AddInParameter(_cmd, "ntitle", DbType.String, "AA");  
              db.AddInParameter(_cmd, "valuea", DbType.String, "AA");  
              db.ExecuteNonQuery(_cmd, _trans as DbTransaction);  
              db.ExecuteNonQuery(_cmd, _trans as DbTransaction);//ntitle字段上建有唯一索引,故第二次插入同样记录时会报错  
              _trans.Commit();  
          }  
          catch  
          {  
              try  
              {  
                  _trans.Rollback();//事务提交失败时,则回滚(是否回滚成功,可查看表中有无AA的记录即可)  
              }  
              catch { }  
          }  
          finally  
          {  
              conn.Close();  
          }  
      }  
      #endregion 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐