您的位置:首页 > 数据库

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

2013-06-14 16:41 411 查看
两条更新语句只要其中一条影响的行数为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("修改失败!");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐