首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在一条SQL语句中向2个表中插入数据解决方案

2012-02-04 
在一条SQL语句中向2个表中插入数据表1名称Bulletin,字段BulletinId(主键),Title,Content,Publisher表2名称

在一条SQL语句中向2个表中插入数据
表1   名称Bulletin,字段BulletinId(主键),Title,Content,Publisher
表2   名称ButtetinAuth,字段BulletinId(主键),UserId
怎么在一条SQL语句中想2个表中插入数据
请写具体点
2条SQL语句也可以,但要同步


[解决办法]

create PROCEDURE [存储过程名]
(
@Titlenvarchar(50),
@Content nvarchar(1000),
@Publishernvarchar(200),
@UserIDvarchar(10)
)
AS
BEGIN
declare @posid int
SET NOCOUNT ON

begin transaction [事务名称]

insert into Bulletin(....)--向Bulletin表添加记录

if @@error <> 0
begin
rollback transaction [事务名称]
select N '添加失败! ' as msg
return(0)
end
set @posid = @@identity--得到BulletinId的值


insert into ButtetinAuth(....)--向ButtetinAuth表添加记录

if @@error <> 0
begin
rollback transaction [事务名称]
select N '添加失败! ' as msg
return(0)
end

commit transaction [事务名称]
select N '添加成功! ' as msg

END
[解决办法]
"insert 表1;insert 表2 "这种方式是可以,但不能保证同步(如插入第一个表后就停电了,第二个表还没来得及插入,所以就不同步了),要数据同步就要用数据库事务。

private SqlConnection myConn = new SqlConnection(); //连接
private SqlTransaction Transaction = null; //事务
private SqlCommand Cmd = new SqlCommand();

假设myConn已经配置好

事务开始:
try
{
myConn.Open();
Transaction = myConn.BeginTransaction(); //事务开始
Cmd.Transaction = Transaction; //将Cmd指向Transaction事务

string strSQL= "insert 表1 ";
Cmd.CommandText = strSQL; //插入第一个表
Cmd.ExecuteNonQuery();

strSQL= "insert 表2 ";
Cmd.CommandText = strSQL; //插入第一个表
Cmd.ExecuteNonQuery();

Transaction.Commit(); //提交事务

}
catch (Exception e)
{
Transaction.Rollback(); //撇消事务
throw new Exception(e.Message);
}

热点排行