سلام.
ما کلا دو نوع مقدار برگشتی داریم. یکی نوعی هست که هنگام تعریف پارامترهای خروجی با کلمه کلیدی output مشخص میشه و نوع دوم نوعی هست که با دستور declare ابتدا متغیر خروجی مورد نظرمان رو اعلان می کنیم و سپس از کلمه کلیدی return برای برگشت اون مقدار استفاده می کنیم. من هر دو مدل رو با کدهاش توضیح میدم تا شما هر مدلی که استفاده کردید رو بتونید در برنامه تون انجام بدید.
ابتدا نوعی رو که با کلمه کلیدی output مشخص میشه :
فرض کنید قصد اضافه کردن یک مدیر جدید داشته باشیم. مطمئنا قبل از ثبت نام بایدچک کنیم که آیا اون نام کاریری قبلا ثبت شده یا که خیر و سپس نتیجه این کار رو به برنامه ارسال کنیم (پارامتر خروجی داشته باشیم) :
create proc AddAdmin
@username nvarchar(50),
@password nvarchar(50),
@result int output
as
if(EXISTS(select * from TblAdmin where UserName = @username))
set @result = 1
else
begin
set @result = 0
insert into TblAdmin(UserName,Password) values(@username,@password)
end
go
در سمت سی شارپ هم بصورت زیر می تونید مقدار برگشت داده شده رو دریافت کنید :
SqlCommand cmd = new SqlCommand("AddAdmin", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@username", TxtUserName.Text.Trim());
cmd.Parameters.AddWithValue("@password", TxtPass1.Text.Trim());
cmd.Parameters.Add("@result", SqlDbType.Int);
cmd.Parameters["@result"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
int res = Convert.ToInt32(cmd.Parameters["@result"].Value);
if (res == 1)
MessageBox.Show("این نام کاربری قبلا ثبت شده است");
else if (res == 0)
MessageBox.Show("اطلاعات با موفقیت ثبت گردید");
برای نوع دوم که از کلمه کلیدی return برای برگشت استفاده میشه دیگه نباید از نوع output استفاده کرد. فرض بگیرید می خوایم سرچ کنیم که آیا یک شماره دانشجویی در سیستم وجود داره یا نه :
create proc SearchOneStudent
@studentid int
as
declare @result int
if(EXISTS(select * from TblStudent where StdID = @studentid))
return 1
else
return 0
برای استفاده از Return Value در stored procedure دیگه نباید پارامتر خروجی تعریف کرد بلکه باید از کلمه کلیدی Declare برای اعلان متغیر خروجی استفاده کنید و بعد از اون در بدنه sp، این مقدار رو Return کنید. در سمت سی شارپ کدها دقیقا مثل همون حالتی هست که از پارامترهای خروجی (کدهای روش اول) استفاده می کنیم فقط نوع برگشتی رو به جای Output بر روی ReturnValue قرار میدیم. یعنی فقط خط زیر دستخوش تغییر میشه :
cmd.Parameters["@result"].Direction = ParameterDirection.ReturnValue;
موفق باشید.