PDA

View Full Version : مشکل در خواندن اطلاعات از اس کیوال



googoli
یک شنبه 25 دی 1390, 21:10 عصر
با سلام
من کد زیر رو در یک spنوشتم

if not exists(select * from Total_account where Total_ID=@id or Total_ID=@code )
begin
begin tran
begin try
insert into Total_account(Total_ID,Name,Groupname,Status_accou nt) values (@id,@name,@group,@status)
COMMIT TRAN
return 11
end try
begin catch
ROLLBACK TRAN
end catch
end
else
begin
begin tran
begin try
update Total_account set Total_ID=@id,Name=@name,Groupname=@group,Status_ac count=@status where Total_ID=@code
COMMIT TRAN
return 12
end try
begin catch
ROLLBACK TRAN
end catch
end

من این کد رو در اس کیوال تست کردم و وقتی عمل insert رو انجام میده عدد11 و وقتی ابدیت باشه عدد 12 رو نشون میده
ولی وقتی این رو توی سی شارپ می خوام ازش استفاده کنم مقدار بازگشتی چه در زمان درج و چه در زمان ابدیت برابر با -1 می باشد مشکل من از کجا هست ؟

zarrinnegar
دوشنبه 26 دی 1390, 00:00 صبح
زمانی که -1 برمیگردونه اطلاعاتی هم اضافه و یا ویرایش میشه؟

بجای این کار یک متغیر بالای پروسیجر تعریف کن و مقدار 0 رو بهش اختصاص بده بعد بجای return ها مقدار 11 و 12 رو بهش بده و آخر از همه بعد از end مربوط به If بیا اون متغیر رو return کن ببین باز هم -1 میده یا تغییر میکنه

googoli
دوشنبه 26 دی 1390, 21:25 عصر
با تشکر از شما استاد گرامی


زمانی که -1 برمیگردونه اطلاعاتی هم اضافه و یا ویرایش میشه؟

بله اطلاعات هم ویرایش میشه و هم درج میشه
----------------
من کاری که شما گفتید انجام دادم ولی باز هم مقدار بازگشتی برابر با -1 هست
این هم کد

BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @result int
SET NOCOUNT ON;
if not exists(select * from Total_account where Total_ID=@id or Total_ID=@code )
begin
begin tran
begin try
insert into Total_account(Total_ID,Name,Groupname,Status_accou nt) values (@id,@name,@group,@status)
COMMIT TRAN
set @result = 11
end try
begin catch
ROLLBACK TRAN
end catch
end
else
begin
begin tran
begin try
update Total_account set Total_ID=@id,Name=@name,Groupname=@group,Status_ac count=@status where Total_ID=@code
COMMIT TRAN
set @result = 12
end try
begin catch
ROLLBACK TRAN
end catch
end
return @result
-----------------------
END

zarrinnegar
سه شنبه 27 دی 1390, 01:10 صبح
بعد از rolback هم بزار که 21و 22 رو برگردونه باز چک کن اگر باز هم -1 برگردوند کد توی برنامه رو بزار ببینیم چطوری صداش میکنی و چک میکنی

googoli
سه شنبه 27 دی 1390, 18:52 عصر
با تشکر
من کاری رو که شما گفتید انجام دادم ولی باز هم مقدار -1 رو در جواب بر می گردونه
من هم کد اس کیوال رو میذارم و هم کد برنامه رو

BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @result int
SET NOCOUNT ON;
if not exists(select * from Total_account where Total_ID=@id or Total_ID=@code )
begin
begin tran
begin try
insert into Total_account(Total_ID,Name,Groupname,Status_accou nt) values (@id,@name,@group,@status)
COMMIT TRAN
set @result = 11
end try
begin catch
set @result = 21
ROLLBACK TRAN
end catch
end
else
begin
begin tran
begin try
update Total_account set Total_ID=@id,Name=@name,Groupname=@group,Status_ac count=@status where Total_ID=@code
COMMIT TRAN
set @result = 12
end try
begin catch
set @result = 22
ROLLBACK TRAN

end catch
end
return @result
-----------------------
END

و این هم کد برنامه

public void CmdExecuteNonQuery()
{

open();
state= _sqlcmd.ExecuteNonQuery();
close();


}


این هم کد دکمه سیو

if (txtcode.TextLength < 3)
{
message.LengthCode();
return;
}
if ((txtname.Text == "") || (txtcode.Text==""))
{
message.unComplete();
return;
}
_dataAccess.CreatCommand("[dbo].[CreatAccount]", CommandType.StoredProcedure);
_dataAccess.Addparameter("@code", code);
_dataAccess.Addparameter("@id", txtcode.Text.Trim());
_dataAccess.Addparameter("@name", txtname.Text.Trim());
_dataAccess.Addparameter("@status", cmbAccountStatus.Text);
_dataAccess.Addparameter("@group", cmbgoupAcount.Text);
_dataAccess.CmdExecuteNonQuery();
MessageBox.Show( _dataAccess.state);
switch (_dataAccess.state)
{
case 11:
message.savemessage();
break;
case 12:
message.Updatemessage();
break;
/*default :
message.fail();
break;*/

}
FrmTotalAccount_Load(null,null);

cherchil_hra
سه شنبه 27 دی 1390, 20:17 عصر
ExecuteNonQuery تعداد سطرهایی که تغییر کردند برمی گردونه نه مقداری که شما پاس میدی.
چرا منفی 1 میده. چون شما از دستور SET NOCOUNT ON استفاده کردی. اگه off کنی تعداد سطرهایی که تغییر کردند برمیگردونه

از ExecuteScalar باید استفاده کنی تا مقدار resultet رو بگیری

googoli
شنبه 01 بهمن 1390, 12:48 عصر
با سلام
من اخر نتونستم با دستو ر ExecuteScalar هم این کار رو انجام بدم و اون اعداد رو از اس کیوال دریافت کنم اگر می شه یه نمونه کدش رو برام بذارید تا من از اون استفاده کنم ممنون میشم :قلب: