为什么我SQL加了事务处理,却不能阻止INSERT

jnkrsoft 2017-08-31 07:14:46
我想保证数据的完整行 ,其中update更新一定会报错。SQL内部加了约束。为啥事务不能阻止insert

begin transaction
declare @errorSum int --定义变量,用于累计事务执行过程中的错误
/**//*--转帐--*/
update bank set currentMoney=currentMoney-800 where customerName='张三'
set @errorSum=@errorSum+@@error --累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error --累计是否有错误
INSERT INTO bank VALUES('王五',300)


COMMIT transaction
...全文
283 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-09-01
  • 打赏
  • 举报
回复
引用 5 楼 jnkrsoft的回复:
SQL中没加,有可能是这个原因,轻微我ASP.NET中动态生成SQL也可以类似拼接成事务处理语句加上try catch,这种思路 可否,我用net的中事务处理不能保证整个语句块一体化执行以及回滚
可以啊,不过像这样的东西可以直接写成存储过程,更好一些
jnkrsoft 2017-09-01
  • 打赏
  • 举报
回复
SQL中没加,有可能是这个原因,轻微我ASP.NET中动态生成SQL也可以类似拼接成事务处理语句加上try catch,这种思路 可否,我用net的中事务处理不能保证整个语句块一体化执行以及回滚
OwenZeng_DBA 2017-08-31
  • 打赏
  • 举报
回复
引用 3 楼 jnkrsoft的回复:
try catch我都加了,只是代码中没写清楚
sql里面加try catch了吗?
jnkrsoft 2017-08-31
  • 打赏
  • 举报
回复
try catch我都加了,只是代码中没写清楚
OwenZeng_DBA 2017-08-31
  • 打赏
  • 举报
回复
加入try catch
jnkrsoft 2017-08-31
  • 打赏
  • 举报
回复
我这初衷是找ASP.NET事务处理的问题,再SQL中捎带测试发现并没有阻止INSERT.,我ASP.NET中有类似拼接的代码 pisql += " update YSFEE SET I_ISSF=1,I_ShCharge='" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c")).Text.ToString().Trim() + "' WHERE I_ID='" + GridViewYCXFY.DataKeys[i].Value.ToString().Trim() + "' "; pisql += @" INSERT INTO ONEOFF (O_ID,O_DJID,O_FID,O_PRICE,O_COUNT,O_SDATE,O_MON,O_ZNMON,O_TOTAL,O_STATE,O_ISRETURN,O_REMARK,O_DEL,W_NAME,F_CHARGEITEMID,F_YSZNJ,O_Charge,AccoutPer)VALUES(replace(newid(),'-',''),'" + str + @"','" + ((Literal)GridViewYCXFY.Rows[i].FindControl("fid")).Text.ToString().Trim() + @"','" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c1")).Text.ToString().Trim() + @"','" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c2")).Text.ToString().Trim()+@"','"+ DateTime.Now.ToString("yyyy-MM-dd") + @"','" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c")).Text.ToString().Trim() + @"','0','" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c")).Text.ToString().Trim() + @"','0','" + result + "','" + ((Literal)GridViewYCXFY.Rows[i].FindControl("TxtRemark")).Text.ToString().Trim() + "','0','" + ((Literal)GridViewYCXFY.Rows[i].FindControl("chargeName")).Text.ToString().Trim() + "','" + GridViewYCXFY.DataKeys[i].Value.ToString().Trim() + "',0,'" + ((TextBox)GridViewYCXFY.Rows[i].FindControl("c")).Text.ToString().Trim() + "','" + tbKJTime.Text.ToString().Trim() + "')"; qfdj += GridViewYCXFY.DataKeys[i].Value.ToString().Trim() + ","; da.Begin();//事务的开始 da.ExecuteNonQuery(pisql);//执行拼接SQL方法 da.Commit();//事务的提交 catch { da.Rollback();//事务的回滚 -------类似简单吧,我都设置了,很奇怪当操作过程中,浏览器崩溃了,insert都插入了,但是update 都没执行,请高手给予指点,我仔细检查了好几遍代码,不存在语法问题错误,封装类方法也么有问题。 public void Begin() { sqlt = conn.BeginTransaction(); com.Transaction = sqlt; } public void Rollback() { try { sqlt.Rollback(); } finally { conn.Close(); sqlt.Dispose(); } } public void Commit() { //try //{ sqlt.Commit(); //} //finally //{ // conn.Close(); // sqlt.Dispose(); //} }

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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