execute后的事务计数指示缺少了commit或rollback transaction
发些前台代码 SqlConnection con = baseoperate.getcon();
con.Open();
SqlTransaction tran = con.BeginTransaction();
try
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
SqlCommand sqlcom = new SqlCommand("GoodsOutput", con);
sqlcom.Transaction = tran;
sqlcom.CommandType = CommandType.StoredProcedure;
sqlcom.Parameters.AddWithValue("@出仓单号", MOdanhao.Text);
sqlcom.Parameters.AddWithValue("@出仓日期", MOdate.Value);
sqlcom.Parameters.AddWithValue("@操作人员代码", MOperson.Text);
sqlcom.Parameters.AddWithValue("@物料代码", Convert.ToString(row.Cells[0].Value));
sqlcom.Parameters.AddWithValue("@数量", Convert.ToInt32(row.Cells[1].Value));
sqlcom.Parameters.AddWithValue("@备注", MOremark.Text);
sqlcom.Parameters.Add(new SqlParameter("@return",SqlDbType.Int));
sqlcom.Parameters["@return"].Direction=ParameterDirection.ReturnValue;
sqlcom.ExecuteNonQuery();
if (int.Parse(sqlcom.Parameters["@return"].Value.ToString())==0)
{
tran.Rollback();
MessageBox.Show("数量不足");
return;
}
sqlcom.Dispose();
GoodsOutput存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GoodsOutput] @出仓单号 nchar(20),@出仓日期 datetime,@操作人员代码 nchar(10),
@物料代码 nchar(16),@数量 int,@备注 nchar(20)
AS
begin transaction
declare @序号 int,@number int
if not exists(select * from Output)
set @序号=1
else
set @序号=(select max(序号) from Output)+1
set @number=(select 库存量 from material where 物料代码=@物料代码)-@数量
if @number<0
begin
rollback
return 0
end
else
begin
insert into Output values(@序号,@出仓单号,@出仓日期,@操作人员代码,@备注,@物料代码,@数量)
update material set 库存量=库存量-@数量 where 物料代码=@物料代码
commit
return 1
end
}
把存储过程的事务去掉就不会出错,添加上去就出错。 求个解决方法 (不能取消事务)