技术开发 频道

使用强类型DataSet创建高效的数据访问层:存储过程输出参数的使用


【IT168技术文档】

  Asp.net2.0中可方便地使用强类型DataSet来创建数据访问层,该方法甚至可自动生成Select、Update、Insert、Delete方法及其存储过程,但该方法自动生成的更新数据库的存储过程只能针对一个表的操作,而且往往都比较简单。现举一个简单的例子,我们插入一条记录时要首先检查数据库中是否存在该记录,如不存在该记录,才进行插入操作。为完成上述操作,很多程序员往往都是通过两次访问数据库来完成,第一次是先检查是否存在该记录,如不存在,才在第二次访问数据库中执行插入语句,这种方法效率的低下自不用多说。下面的例子在创建DataSet时使用了输出参数,并根据输出参数的值来判断该记录是否存在,并在记录未存在时就执行相应的插入操作。所有操作只需一次访问数据库。通过上面这个简单的例子来了解强类型DataSet中输出参数的使用。首先创建存储过程,对应的存储过程如下:
1CREATE PROCEDURE dbo.Ticket_InsertTicket 2( 3 @IsExist BIT OUTPUT, 4 @StartStation nvarchar(20), 5 @EndStation nvarchar(50), 6 @Price money, 7 @LowDiscount tinyint, 8 @HighDiscount tinyint, 9 @IsInLand bit, 10 @Continent nvarchar(20) = NULL 11) 12AS 13 SET NOCOUNT OFF; 14IF EXISTS ( SELECT ID FROM [Ticket] WHERE ( [StartStation]=@StartStation AND [EndStation]=@EndStation ) ) 15BEGIN 16SET @IsExist = 1 17RETURN 18END 19ELSE 20BEGIN 21INSERT INTO [Ticket] ([StartStation], [EndStation], [Price], [LowDiscount], [HighDiscount], [IsInLand], [Continent]) VALUES (@StartStation, @EndStation, @Price, @LowDiscount, @HighDiscount, @IsInLand, @Continent); 22SELECT ID, StartStation, EndStation, StartStation + '' + EndStation AS Line, Price, 23 LowDiscount, HighDiscount, CAST(LowDiscount AS NVARCHAR(4))+''+CAST(HighDiscount AS NVARCHAR(4))+'' AS Discount, IsInLand, Continent 24FROM Ticket WHERE (ID = SCOPE_IDENTITY()) 25END 26GO 27
  该存储过程不用详细介绍,只需了解@IsExist为输出参数,并且如已存在相同的StartStation和EndStation记录,则不执行插入操作,@IsExist值为1,否则执行相应的插入操作,@IsExist值为0。
  然后创建Dataset,对应的Dataset见下图:
0
相关文章