两条更新语句只要其中一条影响的行数为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("修改失败!");
}
}