尝试多用几个go
尝试dbcc checkdb
尝试chkdsk 磁盘
尝试dbcc checkdb
尝试chkdsk 磁盘
解决方案 »
- 别名能用参数代替吗
- SQL2000连接问题
- 请问如何将exec(@sql)的执行的结果写入表中(临时表也可以)
- 有谁用过ODBC的方式连接数据库吗?
- 有没有办法解决 MS SQL 2005 占用CPU100%?
- 请问我的电脑配置能够流畅运行SQL Server 2008?
- 求高手 在对面服务器上只有读权限 如何定时执行在对面服务器上的SQL代码load数据
- 如何进行数据库之间的转换,(让 自增字段与转换后的对应起来可以么?)
- 数据库占用空间变得愈来愈大(4180.87M),怎么办?可用空间只剩可怜的38M
- 哪有怎样怎样写存储过程的教程下载!!!
- (高分求助)asp调用存储过程报错:以开头的标识符太长,最大长度为 128。
- 求高手帮忙,sql查询问题(在线等)
if @@error <> 0 GOTO e_fail
这种不涉及到数据变动的语句我没有加错误捕捉的
和这个有关么???
%>
<%
id=request("id")
cont=request("cont")
ps="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb")
Set Conn=Server.CreateObject("ADODB.CONNECTION")
conn.open ps%>
<% Conn.BeginTrans
%>
<% sqlText="Insert into b1(id2) values("&id&")" %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then
%>
<% conn.Errors.Clear %>
<%'如果插入数据操作失败,则事务向前回滚
%>
<% conn.RollBackTrans %>
<% response.write "RegisterFail.html"
%>
<% end if
%>
<% sqlText="Insert into b2(id,content) values("&id&",'"&cont&"')" %> <%//执行事务单元中的第二条插入语句
conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear
%><%'//如果操作失败,则事务向前回滚
conn.RollBackTrans
%>
<% response.write "RegisterFail.html" %>
<% end if %><%'如果整个事务操作执行正确,则提交事务
Conn.CommitTrans
%><%'转向注册成功处理提示
response.write "RegisterOk.html" %>列2----------------------------------------------------------<%
'asp事务处理。
'测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(int)主键标识,num(int)
set conn=server.CreateObject("adodb.connection")
strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
conn.Open strConn
'以上代码建立数据库连接
conn.BeginTrans '事务开始
strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确)
strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句
strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1)
call conn.execute(strSql2)
call conn.execute(strSql3) if conn.Errors.Count=0 then
conn.CommitTrans '如果没有conn错误,则执行事务提交
else
conn.RollbackTrans '否则回滚
end if
%>
以上代码经调试,可以正常的进行事务处理。但是有时候,我们并不想将编译错误显示给用户。
则我们需要在conn.BeginTrans后面加上On error resume next
但是因为用到了On error resume next。conn.Errors.Count只能获得最后一个数据库操作的conn返回的结果 。上面的三个sql语句,因为最后一个sql语句是正确的,则此事务处理就无效了。那我们需要对出错处理作出相对应的修改。
if conn.Errors.Count=0 then应该改为if err.number=0 then
这样,我们可以在数据库回滚后同时做出其他相对应的操作或者提示。修改后的代码如下:
<%
set conn=server.CreateObject("adodb.connection")
strConn="provider=sqloledb.1;persist security info=false;uid=sa;pwd=sa;Initial Catalog=test;Data Source=."
conn.Open strConn
'以上代码建立数据库连接
conn.BeginTrans '事务开始
on error resume next '增加的代码
strSql1="update a set num=1000 where id=24" '第一个sql语句为update。(语法正确)
strSql2="insert into a(num) values('a')" '第二个sql语句为错误的sql语句
strSql3="insert into a(num) values(33333)" '第三个sql语句为正确的sql语句 call conn.execute(strSql1)
call conn.execute(strSql2)
call conn.execute(strSql3) if err.number =0 then
conn.CommitTrans '如果没有conn错误,则执行事务提交
else
conn.RollbackTrans '否则回滚
'回滚后的其他操作
strerr=err.Deion
Response.Write "数据库错误!错误日志:<font color=red>"&strerr &"</font>"
Response.End
end if%>
Set implicit_transaction on设置隐式事务模式,它生成连续的事务链,
当提交或者回滚显式模式,或者关闭隐性模式后,将自动转到默认事务模式
2005的默认事务模式是自动提交事务