流程:
1. C#中:
开始事务
批量插入1000条数据
提交事务
catch(Exception) 出错则回滚
2. SQLServer中:
insert触发器,对于每一条新插入的数据都要执行一遍某存储过程问题:
C#提交事务时会catch到SqlException:"The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION."1. 如果直接在SQLServer的查询分析器中手动的插入1000条数据,触发器和存储过程的执行都没有任何问题;
2. 如果在C#批量插入数据时,只插入10条数据就没有问题,但是50条就会报错误!!C#:
try
{
cmdInsert = new SqlCommand(strInsertSQL, conn);
trans = conn.BeginTransaction(); // 开始事务
cmdInsert.Transaction = trans; // 将事务与SqlCommand关联
for(int i=0; i<ds.Tables[0].Rows.Count; i++)
{
DataRow row = ds.Tables[0].Rows[i];
SqlParameter[] paramArray = getParamArray(row);
cmdInsert.Parameters.Clear();
for (int j=0; j<paramArray.Length; j++)
{
cmdInsert.Parameters.Add(paramArray[j]);
}
cmdInsert.ExecuteNonQuery();
}
trans.Commit(); // 提交事务
}
catch(Exception ex)
{
trans.Rollback();
}触发器:
CREATE TRIGGER [trigger_AppengTicketProc] ON [dbo].[TicketHistory]
FOR INSERT
AS
DECLARE @TicketID int
SELECT @TicketID=TicketID from inserted
EXEC sp_AppendTicket @TicketID存储过程:
太长了,不贴了!
1. C#中:
开始事务
批量插入1000条数据
提交事务
catch(Exception) 出错则回滚
2. SQLServer中:
insert触发器,对于每一条新插入的数据都要执行一遍某存储过程问题:
C#提交事务时会catch到SqlException:"The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION."1. 如果直接在SQLServer的查询分析器中手动的插入1000条数据,触发器和存储过程的执行都没有任何问题;
2. 如果在C#批量插入数据时,只插入10条数据就没有问题,但是50条就会报错误!!C#:
try
{
cmdInsert = new SqlCommand(strInsertSQL, conn);
trans = conn.BeginTransaction(); // 开始事务
cmdInsert.Transaction = trans; // 将事务与SqlCommand关联
for(int i=0; i<ds.Tables[0].Rows.Count; i++)
{
DataRow row = ds.Tables[0].Rows[i];
SqlParameter[] paramArray = getParamArray(row);
cmdInsert.Parameters.Clear();
for (int j=0; j<paramArray.Length; j++)
{
cmdInsert.Parameters.Add(paramArray[j]);
}
cmdInsert.ExecuteNonQuery();
}
trans.Commit(); // 提交事务
}
catch(Exception ex)
{
trans.Rollback();
}触发器:
CREATE TRIGGER [trigger_AppengTicketProc] ON [dbo].[TicketHistory]
FOR INSERT
AS
DECLARE @TicketID int
SELECT @TicketID=TicketID from inserted
EXEC sp_AppendTicket @TicketID存储过程:
太长了,不贴了!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货