ورود

View Full Version : فوری فوری مشکل در sp



rambod51
دوشنبه 12 مرداد 1394, 11:39 صبح
با سلام
من یه تیکه کد نوشتم که از تو سی شارپ برای برداشت از حساب که یه سری پارامتر رو به Sp میفرسته و یک حساب رو چک میکنه اگر مقداری که میخوایم از حساب برداشت کنیم از موجودی بیشتر بود و حساب منفی میشد کاری انجام نده در غیر این صورت از حساب برداشت کنه
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
رو میده این دستورات من هستش
ALTER proc [dbo].[bar1]
@i nvarchar(13),
@dat nvarchar(10),
@vari int,
@bar int ,
@tra nvarchar(10),
@mand1 int output
--@result int output
as

begin tran t2
insert Into gardesh(id,date1,variz,bardasht,tarakonesh)Values
(@i,@dat,@vari,@bar,@tra);
if (exists (select * from mandeh where ID=@i))
begin
select @mand1= mandeh from mandeh where id=@i
if @mand1-@bar<0

begin
set @mand1=0
rollback tran t2
end
else
begin
UpDate mandeh set mandeh=mandeh-@bar,date1=@dat where id=@i;
-- set @result=1
set @mand1=1
end
end
commit tran t2
و اینم پارامترها و دستورات من
public partial class pbardasht : System.Web.UI.Page
{
SqlConnection conObj;
protected void Page_Load(object sender, EventArgs e)
{
conObj = new SqlConnection("data source=.; database=test; integrated security=true;");
}
protected void Button1_Click(object sender, EventArgs e)
{

SqlCommand cmdObj = new SqlCommand("bar1", conObj);
cmdObj.CommandType = CommandType.StoredProcedure;
cmdObj.Parameters.AddWithValue("@i", TextBox1.Text);
cmdObj.Parameters.AddWithValue("@dat", TextBox2.Text);
cmdObj.Parameters.AddWithValue("@vari", Convert.ToInt32(TextBox3.Text));
cmdObj.Parameters.AddWithValue("@bar", Convert.ToInt32(TextBox4.Text));
cmdObj.Parameters.AddWithValue("@tra", TextBox5.Text);
cmdObj.Parameters.Add("@mand1",SqlDbType.Int);
cmdObj.Parameters["@mand1"].Direction=ParameterDirection.Output;
//cmdObj.Parameters.Add("@result", SqlDbType.Int);
// cmdObj.Parameters["@result"].Direction = ParameterDirection.Output;

conObj.Open();
cmdObj.ExecuteNonQuery();
conObj.Close();
اگر کسی بتونه کمک کنه ممنون میشم
133872
کل قسمتی که نیازه رو ضمیمه کردم اسم sp من bar1
با تشکر از همه شما دوستان میباشد

rambod51
دوشنبه 12 مرداد 1394, 15:26 عصر
133872
کل قسمتی که نیازه رو ضمیمه کردم
اسم sp من bar1 میباشد
با تشکر از همه شما دوستان

برنامه تستی به همراه بانک و sp ضمیمه شده
اگر کسی بتونه کمک کنه ممنون میشم

rambod51
دوشنبه 12 مرداد 1394, 16:10 عصر
برنامه تستی به همراه بانک و sp ضمیمه شده
اگر کسی بتونه کمک کنه ممنون میشم

به جای دستورات قبلی از havig به صورت زیر استفاده کردم

begin tran t2
insert Into gardesh(id,date1,variz,bardasht,tarakonesh)Values
(@i,@dat,@vari,@bar,@tra);
if (exists (select * from mandeh where ID=@i))
begin
select mandeh from mandeh group by mandeh having((mandeh-@bar)< 0)
rollback tran t2
end
else
begin
UpDate mandeh set mandeh=mandeh-@bar,date1=@dat where id=@i
end
commit tran t2

اما اینبار پیام خطای زیر رو میده

The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

rambod51
چهارشنبه 14 مرداد 1394, 06:11 صبح
کسی نمی تونه کمک کنه

tooraj_azizi_1035
چهارشنبه 14 مرداد 1394, 08:42 صبح
خطای شما میگه تعداد BEGIN TRAN ها و COMMITT TRAN ها با هم برابر نیست!

rambod51
چهارشنبه 14 مرداد 1394, 10:08 صبح
با سلام درود
نه مشکل این نبود چون تعداد تراکنشهای من فقط یکی بود همونطور ه در متن بالا مشخص بود مشکل برنامه رو پیدا کردم مشکل از نوع دستورات بود که با having و اصلاح به یک خط بر طرف شد نمونه اونو میزارم شاید برخی از دوستان به کارشون بیاد
begin tran t2
insert Into gardesh(id,date1,variz,bardasht,tarakonesh)Values
(@i,@dat,@vari,@bar,@tra);
if (exists (select * from mandeh where ID=@i group by mandeh having(mandeh-@bar)< 0))
begin
-- set @mand1=0
rollback tran t2
end
else
begin
UpDate mandeh set mandeh=mandeh-@bar,date1=@dat where id=@i;
-- set @result=1
end
commit tran t2
که خط دستورات زیر از

insert Into gardesh(id,date1,variz,bardasht,tarakonesh)Values
(@i,@dat,@vari,@bar,@tra);
if (exists (select * from mandeh where ID=@i))
begin
select @mand1= mandeh from mandeh where id=@i
if @mand1-@bar<0

begin
set @mand1=0
rollback tran t2
end
را به شکل زیر تغییر دادم م مشکل حل شد
begin tran t2
insert Into gardesh(id,date1,variz,bardasht,tarakonesh)Values
(@i,@dat,@vari,@bar,@tra);
if (exists (select * from mandeh where ID=@i group by mandeh having(mandeh-@bar)< 0))
begin
-- set @mand1=0
rollback tran t2
end

rambod51
چهارشنبه 14 مرداد 1394, 10:09 صبح
با تشکر از همه دوستان