【发布时间】:2015-08-13 07:39:53
【问题描述】:
我正在使用 TransactionScope() 这样..
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "proc_insertlot"; cmd.Connection = sqlconn;
da = new SqlDataAdapter(cmd);
for (int i = 0; i < 3 i++)
{
da.Fill(ds);//this insert a row in a table which has identity column
LotId = ds.Tables[1].Rows[0][0].ToString();//always return same identityvalue
}
//---TransactionScope 提交
似乎除非我提交事务,否则 scope_identity 不会增加。在此示例中,scope_identity 将返回相同的值 3 次。你怎么解决这个问题?
SQL:
ALTER procedure proc_insertlot
@AuctionId int=0,
@Title varchar(300)='',
@Description varchar(4000)='',
@lottype varchar(20)='',
@ImproveBidBy varchar(20)='',
@BidDecrement varchar(20)='',
@FrontBuffer varchar(20)='',
@BackBuffer varchar(20)='',
@AttachmentId varchar(30)='',
@MkrId varchar(11)='' ,
@file_uploadlot varchar(30) =''
as
set nocount on
insert into tbl_lots(AuctionId,Title,Description,lottype,ImproveBidBy,BidDecrement,FrontBuffer,BackBuffer,AttachmentId,MkrId,MkrDt)
values (@AuctionId,@Title,@Description,@lottype,@ImproveBidBy,@BidDecrement,@FrontBuffer,@BackBuffer,@AttachmentId,@MkrId,GETDATE())
select @@Identity as lotid
【问题讨论】:
-
通常,da 是数据适配器,ds 是数据集,所以 da.Fill(ds) 从数据库中选择记录,而不是向其中插入记录......
-
@ZoharPeled SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "proc_insertlot"; cmd.Connection = sqlconn; da = new SqlDataAdapter(cmd);
-
@Arbaaz - 如果您想添加更多代码,请edit 您的问题,以便您可以使用格式化工具 (
{}) cmets 中的代码实际上是不可读的。 -
@Damien_The_Unbeliever .. 完成
-
@AmitRanjan - 没问题。我当然可以自己做,但我尝试鼓励 OP 做这种工作,以便他们掌握编辑的窍门,根据 cmets 改进他们的问题等。
标签: c# sql asp.net .net sql-server