专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > ASP

事务程序与数据库触发器的有关问题.

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
事务程序与数据库触发器的问题.急....
HTML code

proadd.asp的主要代码如下:

on error resume next
conn.BeginTrans

for i =1 to 10
    pid=request.form("proid"&i)
    num=request.form("num"&i)
    sql="insert into prolist(pid,account) values('"&pid&"','"&num&"')"
    conn.execute(sql)
end if

if conn.Errors.Count=0 then
    conn.CommitTrans
    response.write "成功更新。"
else
    conn.RollbackTrans
    call alert("执行操作时出错,请重新尝试!")
end if

-------------------------------------------------
ms sql2000中,表prolist的字段如下:用于记得每次进仓,出仓的明细记录的:
id    pid(即是产品ID号)    account

--------------------------------------------------
库存表proall的字段如下:
pid   allaccount

--------------------------------------------------
我想要个触发器,实现每次向表prolist插入数据时,将通过prolist的触发器将数量account累加到proall表中。

如果程序文件proadd.asp不是用事务的话,触发器大伙都知怎么编写的,就如下:
CREATE TRIGGER [prolist_add] ON dbo.prolist 
FOR INSERT 
AS
begin
    declare @pid numeric(10)
    declare @account numeric(10)
    select @pid=pid,@account=account from inserted
    update proall set allaccount=allaccount + @account where pid=@pid
end

我想问的是,程序文件proadd.asp用了事务的话,上面这个触发器就只会最后一次insert记录进行更新,
而前面的是没有更新表proall的allaccount的(我是一次提交10条记录的,如果用了事务,执行conn.CommitTrans后,
只会对第10次的insert记录进行触发,将数量更新到proall表中,而前面9次的没有更新的)
那请问,这个触发器怎么写呢?在线等。。。。。。。




------解决方案--------------------
MS SQL存储过程
Create proc sp_join
@result int output,
@email nvarchar(30),
@username nvarchar(15)
AS

-- 开始事务
Begin Tran
INSERT INTO users(username, email) VALUES(@username, @email)
IF @@ERROR <> 0 GOTO back

INSERT INTO register(username) VALUES(@userName)
IF @@ERROR <> 0 GOTO back


-- 提交事务
Set @result = 1
Commit Tran
Return


-- 回滚事务
back:
Set @result = 0
RollBack Tran
Return

数据库连接代码
Sub Command(oCmd)
Set oCmd = Server.CreateObject("ADODB.Command")
End Sub

Sub Connection(oConn)
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=SQLOLEDB;Server=;User ID=;Password=;Database=;"
End Sub

Sub Destroy(obj)
If isObject(obj) Then Set obj = Nothing
End Sub

ASP调用代码
Dim strEmail, strUserName
Dim objCmd, objConn, intResult

strEmail = Request.Form("email")
strUserName = Request.Form("username")

'服务器端数据验证(略)

Command objCmd
Connection objConn

With objCmd
.ActiveConnection = objConn
.CommandType = 4
.CommandText = "sp_join"
.Parameters.Refresh
.Parameters("@email") = strEmail
.Parameters("@username") = strUserName
.Execute
End With
intResult = objCmd.parameters("@result")

Destroy objCmd
Destroy objConn

If intResult = 0 Then
Response.Write("注册失败")
Else
Response.Write("注册成功")
End If
这是一个简单的例子,希望能起到抛砖引玉的作用。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ASP怎么隐藏表单

    ASP如何隐藏表单 <%if Cookies_Toy ="" then response.write "<a href='login.asp'>登录</a> <a href='reg.asp'>注册</a>" ...

  • 为何js调用css脚本后没效果

    为什么js调用css脚本后没效果 这个是css的脚本代码: body,ul,li{margin: 0; padding: 0; border: 0;} body {background: #f5f...

  • 怎么伪造post请求,求指点。

    如何伪造post请求,求指点。。。 要查询大批(也就几万个)运单的状态,那查询网站一次最多查24个,这一个个搞会搞死人的。。 有...

  • Asp.net_简略代码设置GridView自适应列宽不变形

    Asp.net_简单代码设置GridView自适应列宽不变形 动态绑定的GridView由于列数不固定,而列又太多(博主做的这个项目有150个左右的字段...

  • ASP.NET上实现AJAX注册提醒

    ASP.NET下实现AJAX注册提醒 Ajax全称是,主要是利用JavaScript实现异步的数据传输,首先说异步,异步是当前操作进行的时候,用...

  • aspnet_regiis装配出错:0x80070005 拒绝访问

    aspnet_regiis安装出错:0x80070005 拒绝访问 点击右边红色标题查看本文完整版:aspnet_regiis安装出错:0x80070005 拒绝访问安装...

  • 关于网站边框解决方法

    关于网站边框 像hao123这样的网站上的边框是着么弄的?背景图片吗?http://www.hao123.com 另外哪个素材网站有实用的这内素材 -----...

  • ! 多表分组查询统计

    求助!! 多表分组查询统计 高手们,帮帮忙! 用户表 D_user 为 ID Username GroupID 1 张三 2 2 李四 2 3 王五 ...

  • 在Paypal交付的同时,把表单的数据提交给数据库

    在Paypal提交的同时,把表单的数据提交给数据库 本帖最后由 liuyang2708 于 2012-11-20 23:14:54 编辑 在提交这个支付...

  • 虚拟目录上JavaScript不能正常执行

    虚拟目录下JavaScript不能正常执行 各位大侠好,我在同一台服务器上用两种方式部署同一个网站。 第一种方法:在IIS下直接建一个网站...

热门推荐: