双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

execute后的事务计数指示缺少了commit或rollback transaction

kkao0001 kkao0001 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
发些前台代码 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

}



把存储过程的事务去掉就不会出错,添加上去就出错。 求个解决方法 (不能取消事务)
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
kkao0001
C# 111,129 成员 642,540 内容