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

دریافت مقدار برگشتی از استورد پروسیجر

+1 امتیاز
با عرض سلام.

چطور می تونم مقادیر برگشتی از استورد پروسیجر رو در محیط سی شارپ دریافت کنم؟
سوال شده اسفند 15, 1392  بوسیله ی Nima (امتیاز 27)   3 3 4
ویرایش شده اسفند 15, 1392 بوسیله ی veniz2008

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام.

ما کلا دو نوع مقدار برگشتی داریم. یکی نوعی هست که هنگام تعریف پارامترهای خروجی با کلمه کلیدی 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;

موفق باشید.

پاسخ داده شده اسفند 15, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد اسفند 15, 1392 بوسیله ی Nima
...