关于数据写入的问题

72615 2004-11-30 11:16:32
我在应用程序中比如要一次性向数据库先删除多条记录然后再写入多条新记录,我想在数据库中写一个存储过程通过事务来进行处理。但是我在程序中怎样调用这个存储过程呢?(因为我要向这个存储过程传递的参数的个数不固定即每次删除和新增的记录数不一样。有可能第一次操作先删除10条然后新增12条;第二次操作时可能先删除5条再新增1条。)因此我怎样向存储过程传递参数呢?
我现在采用的方法是,在ado.net里调用事务,多次执行sql语句。这样做倒是能实现功能,但是代码太麻烦,而且要直接调用ado.net对象,不利于系统的统一维护。(因为我将所有的对数据库的访问都封装在一个对象中做成一个dll,我只需要调用这个dll.就可以很简单容易地操作数据库了.)
各位大哥帮我想想怎样才能使用存储过程来实现这个功能,这样我可以只向我那个dll传递存储过程和参数就ok了。
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
72615 2004-11-30
  • 打赏
  • 举报
回复
看看先
自由之眼 2004-11-30
  • 打赏
  • 举报
回复
其实,你可以把分格字符串的做成数据库函数就更方便了
自由之眼 2004-11-30
  • 打赏
  • 举报
回复
呵呵,我做过类似你的功能,我是通过固定参数实现的。
方法如下:
参数:@sOPPage 是一个连续的使用","分割的参数,它可以很长,也可以很短,我以,来分割。然后在存储过程中处理数据添加问题,当然,多参数的话照此就行。

REATE PROCEDURE POPEDOM_OPUpdate
@sOPID varchar(20),
@sOPPage varchar(500),
@sResult varchar(2) OUTPUT
AS

DECLARE @sTemp_OPPage VarChar(500)
DECLARE @sInster_OPPage VarChar(500)

SET @sTemp_OPPage = @sOPPage+ ','

BEGIN TRANSACTION

DELETE FROM Popedom_OP WHERE OP_ID = @sOPID
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
SET @sResult = '1'
RETURN
END

WHILE CHARINDEX(',',@sTemp_OPPage) > 0
BEGIN
SET @sInster_OPPage = SUBSTRING(@sTemp_OPPage,1,CHARINDEX(',',@sTemp_OPPage) - 1)
-- PRINT @sInster_OPPage
INSERT INTO Popedom_OP (OP_ID, OP_PAGE) VALUES (@sOPID,@sInster_OPPage)
IF @@ERROR <> 0 OR @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
SET @sResult = '2'
RETURN
END
SET @sTemp_OPPage = SUBSTRING(@sTemp_OPPage,CHARINDEX(',',@sTemp_OPPage) + 1,LEN(@sTemp_OPPage)-CHARINDEX(',',@sTemp_OPPage)+1)
END


COMMIT TRANSACTION
SET @sResult = '0'
RETURN

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧