社区
C#
帖子详情
C#中调用存储过程,执行出错会不会回滚?
flyskylf
2006-11-27 03:51:24
我记得我以前做的程序,调用SQLServer中的存储过程,如果执行过程中出现错误就会回滚,最近又做了一个程序,执行出了错误又不回滚,我现在也不明白默认的存储过程到底会不会回滚?请高手给个答案.
...全文
510
20
打赏
收藏
C#中调用存储过程,执行出错会不会回滚?
我记得我以前做的程序,调用SQLServer中的存储过程,如果执行过程中出现错误就会回滚,最近又做了一个程序,执行出了错误又不回滚,我现在也不明白默认的存储过程到底会不会回滚?请高手给个答案.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Dream6000
2006-12-03
打赏
举报
回复
To : sxmsy888(网际浪子)
在SQLServer 2000下,之前我也认为会回滚,测试后发现并不回滚!
SqlServer 2005下没有测试过
flyskylf
2006-11-29
打赏
举报
回复
我用的是2000,前一段时间(半年了)会回滚的,但是最近写的程序又不回滚了,不知道是不是我记错了
CodeWalker2999
2006-11-29
打赏
举报
回复
Dream6000
我用SqlServer 2005测试了一下,确实是回滚了啊,两条记录都没写入。
marvelstack
2006-11-29
打赏
举报
回复
需要使用SqlTransaction类启动事务,或在存储过程中实现Sql 事务语句。
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
Dream6000
2006-11-28
打赏
举报
回复
之前说错了 存储过程是不会被回滚的
create table t2
(
tID int identity(1,1),
tAction nvarchar(30) not null
)
go
create proc p2
as
insert into t2 (tAction) values ('xxx')
insert into t2 (tAction) values (null)
exec p2
虽然出错但 xxx 可以被写入
CodeWalker2999
2006-11-28
打赏
举报
回复
同意Dream6000
不加BEGIN TRANSACTION COMMIT TRANSACTION也会回滚
Dream6000
2006-11-28
打赏
举报
回复
存储过程中的sql命令属于事务处理范畴,即存储过程中的所有sql语句要么都执行,要么都不执行,即"原子性".
你可以写一个存储过程来试试:
create database test
use test
create datatable t1
(
tID int identity(1,1),
tAction nvarchar(30)
)
go
create proc p1
as
insert into t1 (tAction) values ('xxx')
insert into t1 (tAction) values (bbb)
因为 bbb 没有加引号 所以会出错 ,之前成功执行的 'xxx'也被回滚了
zw_angel
2006-11-27
打赏
举报
回复
必须加BEGIN TRANSACTION COMMIT TRANSACTION才能回滚
xyh2002
2006-11-27
打赏
举报
回复
sql中是要这样写的,c#代码会简单些,但是c#代码并不一定会回滚,如果你的数据库连接断了,那么就谈不上执行失败和回滚了。
flyskylf
2006-11-27
打赏
举报
回复
我的另外一个帖子:大家也看看吧,完了一起结掉
http://community.csdn.net/Expert/topic/5188/5188497.xml?temp=.7404901
一个存储过程要执行多条SQL语句,如果程序执行出错为了能够回滚是不是要如下写法?
BEGIN TRANSACTION
EXEC SQL语句1
SET @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER
EXEC SQL语句2
SET @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER
EXEC SQL语句3
SET @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER
.....
EXEC SQL语句N
SET @Error = @@ERROR
IF @Error != 0 GOTO ERROR_HANDLER
COMMIT TRANSACTION
ERROR_HANDLER:
IF @@TRANCOUNT != 0 ROLLBACK TRANSACTION
RETURN @Error
有没有简单的写法不要写那么多的 SET @Error = @@ERROR IF @Error != 0 GOTO ERROR_HANDLER
lengxiaowei
2006-11-27
打赏
举报
回复
当然不会啦
一定要启动了事务,它才会回滚
mobydick
2006-11-27
打赏
举报
回复
在代码中使用分布式事务TransactionScope,这个需要数据库支持,并打开相应的服务。
liujia_0421
2006-11-27
打赏
举报
回复
不会...
除非加上事务...
flyskylf
2006-11-27
打赏
举报
回复
必须写BEGIN TRANSACTION COMMIT TRANSACTION等代码才能回滚?
flyskylf
2006-11-27
打赏
举报
回复
也就是说存储过程默认是不会回滚的?
mpss
2006-11-27
打赏
举报
回复
程序没写事条,过程中也没写的话,那就不会
flyskylf
2006-11-27
打赏
举报
回复
我是在存储过程中用的事务
51Crack
2006-11-27
打赏
举报
回复
可以在程序中用事务,也可以在存储过程用事务!
不可同时使用!
flyskylf
2006-11-27
打赏
举报
回复
我里面没有写那些BEGIN TRANSACTION COMMIT TRANSACTION等代码,会不会回滚?
程序小童的爸爸
2006-11-27
打赏
举报
回复
存储过程支持事务
C#
调用
SQL
中
的
存储过程
中
有output参数
本文介绍了如何在
C#
中
调用
SQL
存储过程
,并处理
存储过程
中
的Output参数,通过示例代码展示了如何定义和使用这些参数来获取
存储过程
的返回值。
sqlserver
存储过程
事务强制
回滚
工作
中
在
存储过程
里将A表数据插入B表再删除A表数据,添加事务后仍出现A、B表无数据情况。经查阅发现,数据库默认XACT_ABORT为OFF,仅
回滚
出错
语句,后续仍
执行
;设为ON则
出错
时终止并
回滚
整个事务。
C#
项目
调用
Sqlserver的
存储过程
,为什么不被认为是一个好的方式?
本文探讨了
C#
项目
调用
Sqlserver
存储过程
为何不被认为是好方式。从职责分离、可测试性、可维护性、系统可移植性、安全与性能等方面分析其非最佳实践的理由,也指出批量数据处理等场景下使用的合理性,建议将业务逻辑回归应用层。
SqlServer
中
视图、
存储过程
、事务的使用。
本文介绍了SQL Server
中
视图、
存储过程
和事务的基本概念与使用方法。视图简化了复杂的SQL查询,提供权限控制;
存储过程
作为数据库
中
的函数,提高
执行
速度和安全性;事务确保数据一致性,支持
回滚
和继续
执行
的策略。
redis的事务
执行
失败需要手动
回滚
吗
文章围绕Redis事务
执行
失败是否需手动
回滚
展开。介绍了Redis事务
执行
流程,包括开始事务、
执行
命令、
执行
事务和错误处理。指出Redis事务不支持自动
回滚
,若
执行
出错
需手动处理,还给出了手动
回滚
的代码示例。
C#
111,131
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章