PDA

View Full Version : ایرادی در نحوه خواندن اطلاعات



Mahdad999
یک شنبه 09 مرداد 1390, 20:36 عصر
با سلام،
یه مقدار NvarChar بنام @Msg توی یه Sp دارم از جنس Out دارم که با کدهای زیر مقداردهی میشه:

if (Insert ….)

begin

set @Msg = 'عضو جدید ثبت شد'

return @Msg;

end




if (@lAccId = 0 or @AccStatus=0 (

begin

set @Msg = 'شماره حساب را چک نمایید'

End




if (@lPerId = 0 or @PerStatus=0(

begin

set @Msg = 'نام و نام خانوادگی را بررسی نمایید'

--print @Msg

end



این مقدار رو توی C# بصورت زیر تعریف کردم:




cmd.Parameters.Add("@Msg", SqlDbType.NVarChar,50);

cmd.Parameters["@Msg"].Direction = ParameterDirection.Output;






و مقدار اون رو به این صورت خوندم:


MessageBox.Show(cmd.Parameters["@Msg"].Value.ToString(), "توجه");






بعد از اجرای برنامه همه چیز درست عمل میکنه و کد هم ثبت میشه، ولی روی کد cmd.ExecuteNonQuery();
ارور با عنوان:

SQLException was unhandled
و شرح ارور:


Syntax error converting the nvarchar value 'عضو جديد ثبت شد' to a column of data type int.

رو میده
نکته جالب اینجاست که وقتی این کد ها رو توی محیط Query Analyzer اجرا میکنم خروجی رو بدون هیچ ایرادی نشون میده!
این ارور رو چطور میتونم برطرف کنم؟
:متفکر:

یوسف زالی
یک شنبه 09 مرداد 1390, 21:32 عصر
دوست من در SP فقط میشه یک عدد صحیح return کرد نه رشته.
return مربوط به رشته رو حذف کنید و دوباره تست کنید.

Mahdad999
دوشنبه 10 مرداد 1390, 01:57 صبح
دوست من در SP فقط میشه یک عدد صحیح return کرد نه رشته.
return مربوط به رشته رو حذف کنید و دوباره تست کنید.
با عرض سلام خدمت شما،
این کار رو هم امتحان کردم، ارور برطرف میشه ولی اگه برای گزینه اول( "ثبت شد") عدد 1، گزینه دوم ("'شماره حساب را چک نماید") عدد 2 و گزینه سوم (نام و نام خانوادگی را بررسی نمایید) عدد 3 رو برگردونه همیشه عدد آخر یعنی 3 رو برمیگردونه!

یوسف زالی
دوشنبه 10 مرداد 1390, 16:26 عصر
ظاهرا در return کردن مشکل دارید.
اگر جای شما بودم این طوری می نوشتم:


if (Insert ….)
return 1
else if (@lAccId = 0 or @AccStatus=0)
return 2
else if (@lPerId = 0 or @PerStatus=0)
return 3



و اصلا از Output استفاده نمی کردم. در برنامه هم یه switch case می نوشتم برای هر خروجی یک پیغام.

Mahdad999
پنج شنبه 13 مرداد 1390, 08:45 صبح
ظاهرا در return کردن مشکل دارید.
اگر جای شما بودم این طوری می نوشتم:


if (Insert ….)
return 1
else if (@lAccId = 0 or @AccStatus=0)
return 2
else if (@lPerId = 0 or @PerStatus=0)
return 3


و اصلا از Output استفاده نمی کردم. در برنامه هم یه switch case می نوشتم برای هر خروجی یک پیغام.

دقیقا همینطوره مشکل من با return هستش ببینید من کدهای store proc رو توی Query Analyzer چک کردم به راحتی جواب میده و خروجی هم، هم به صورتی که خودم نوشتم و هم به فرمی که شما گفتید به من میده، ولی وقتی همون کدها رو توی sp میذارم و از توی C# برنامه رو اجرا میکنم خروجی ها اشتباهی میشه! یعنی رکورد رو ثبت میکنه ولی خروجی قسمت Error رو برمیگردونه.
(البته توی کدهای ساده تر هم من با این مشکل برخورد کردم ونمیدونم کجای کار ایراد داره)



و اصلا از Output استفاده نمی کردم. در برنامه هم یه switch case می نوشتم برای هر خروجی یک پیغام.
راستش رو بخواید توی SQL این کار رو انجام دادم ولی من تا حالا فقط با Output توی C# کار کردم و نمیدونم چطور میشه بدون داشتن خروجی Output توی sp فقط مقدار return شده رو خوند اگه ممکنه در اینمورد هم راهنمایی بفرمایید.
من SP رو میذارم تا اگه ایراد توی کد من هستش اساتید متوجه بشن:
73267

یوسف زالی
پنج شنبه 13 مرداد 1390, 17:28 عصر
راستش من #C کار نیستم و برای این کار می تونین از دوستان تالار #C استفاده کنین.
یه قرار با خودتون بذارید: یا return یا output (البته برای این مثال خاص شما)
استفاده از هردو اینها فکر نکنم در مورد شما لزومی داشته باشه.
می دونین که return شدن باعث میشه باقی کد شما نادیده گرفته شه.(در SQL)
موفق باشید.