SQL事务,只要有一条更新语句受影响行数为0则rollback

两条更新语句只要其中一条影响的行数为0,则回滚

create PROCEDURE [dbo].[UpdateCompanyInfoBy_Sam]
@Client varchar(20),
@Code varchar(20),
@CompanyName nvarchar(50),
@Address nvarchar(100),
@Tel varchar(15),
@Person nvarchar(10),
@Email varchar(50),
@Remark nvarchar(250),
@Phcode varchar(20),
@UpdateTime varchar(50)
AS

begin tran --开始执行事务

declare @RowCountA int,@RowCountB int

update Tb_CompanyInfo set client=@Client,code=@Code,CompanyName=@CompanyName,
Address=@Address,Tel=@Tel,person=@Person, Email=@Email,Remark=@Remark where client =@Client and code=@Code

set @RowCountA = @@ROWCOUNT

update Tb_PHCode set phcode=@Phcode where client=@Client and code=@Code

set @RowCountB = @@ROWCOUNT

if @RowCountA = 0 or @RowCountB = 0 --判断如果两条语句有任何一条出现错误
begin
  begin rollback tran --开始执行事务的回滚,恢复的转账开始之前状态
  return 0
  print 0
   end
end
else
begin
  begin commit tran --开始执行事务的回滚,恢复的转账开始之前状态
  return 1
  print 1
  end
end

 

下面是C#调用

protected void Button1_Click(object sender, EventArgs e)

{

SqlConnection con =new SqlConnection(@"Data Source=.\SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); //连接字符串

SqlCommand cmd = new SqlCommand("UpdateCompanyInfoBy_Sam",con); //调用存储过程

cmd.CommandType = CommandType.StoredProcedure;

con.Open();

SqlParameter prar = new SqlParameter();//传递参数

cmd.Parameters.AddWithValue("@Client", TextBox1.Text);

cmd.Parameters.AddWithValue("@code", TextBox2.Text);

cmd.Parameters.AddWithValue("@momeys",Convert.ToInt32( TextBox3.Text) );

......................//此处省略参数

cmd.Parameters.Add("@return", "").Direction = ParameterDirection.ReturnValue;//获取存储过程的返回值

cmd.ExecuteNonQuery();

int i=Convert.ToInt32(cmd.Parameters["@return"].Value);//把返回值赋值给value

if (i>0)

{

MessageBox.Show("修改成功!");

}

else

{

MessageBox.Show("修改失败!");

}

}

 

————————————————
版权声明:本文为CSDN博主「Sam萨姆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzzzzzzert/article/details/9095965

posted @ 2021-11-11 15:06  dreamw  阅读(325)  评论(0)    收藏  举报