Mik*_*ike -1 sql sql-server asp.net locking transactions
我使用此命令在多行中插入多个记录,如果插入不成功,如何锁定命令和回滚更改?
SqlCommand cmd = new SqlCommand();
string s = @"
declare @one_id int;
INSERT INTO tbl_one(o1,o2,o3) VALUES(@o1,@o2,@o3);
set @one_id=SCOPE_IDENTITY();
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t1,@t2,@one_id);
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t3,@t4,@one_id);
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t5,@t6,@one_id);
";
cmd.CommandText =s;
Run Code Online (Sandbox Code Playgroud)
当然你熟悉try catch语句,所以使用它.
将您的语句包含在BEGIN TRANSACTION和COMMIT中,如下所示:
string s = @"
BEGIN TRY
BEGIN TRANSACTION
declare @one_id int;
INSERT INTO tbl_one(o1,o2,o3) VALUES(@o1,@o2,@o3);
set @one_id=SCOPE_IDENTITY();
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t1,@t2,@one_id);
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t3,@t4,@one_id);
INSERT INTO tbl_two(t1,t2,f3) VALUES(@t5,@t6,@one_id);
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
";
Run Code Online (Sandbox Code Playgroud)
如果您的某个语句失败,将启动CATCH块.
祝好运.
归档时间: |
|
查看次数: |
81 次 |
最近记录: |