PDA

View Full Version : مشکل با Null بودن پارامترها در کلاس ساخته شدن توسط sp - gen



majid_darab
یک شنبه 04 بهمن 1388, 02:09 صبح
با سلام بر شما دوستان گرامی و عزیز :
من Table ی دارم که اکثر فیلدهای اون nullable می باشد و جنس فیلدهاش یا int است یا date.
حال با sp - gen ، اس پی ها و کلاس مربوطه را ساخته ام...
سمت sql می شود مقدار null رو به اس پی ها پاس داد (این در حالی است که تیک مربوطه را در برنامه ی sp gen فعال کرده باشیم)
حال سمت برنامه چگونه با پارامترهایی که از جنس int یا date هستند و سمت sql می توانند null باشند برخورد کنم ... چون کلاس ساخته شده توسط sp gen به گونه ای است که نمی توان مقدار null رو به یک پارامتر خاص مثلا از جنس int پاس داد ...
شاید بگویید سمت دیتابیس جنس ها رو string بگیر ....
آیا این کار اصولی و درست است؟
با تشکر
مجید داراب

majid_darab
یک شنبه 04 بهمن 1388, 02:36 صبح
با سلام :
اگر فیلدهای مربوطه را string بگیرم این مشکل به علاوه مشکل نمایش فیلدهای date در گرید (به صورت datetime نشون میداد ، اما من فقط date رو می خوام نشون بده) حل می شه ...
اما مشکلی که اضافه می کنه اینه که ممکنه سمت sql بخوایم sp ی داشته باشیم که در select all اون یک فیلد محاسباتی مربوط به فیلدهای int داشته باشیم ... پس اگر جنسارو string کنیم نمی شه ...
با تشکّر
مجید داراب

مهدی کرامتی
یک شنبه 04 بهمن 1388, 06:58 صبح
در متدی که spgen به ازای یک sp دارای پارامتر null پذیر می سازد جنس پارامتر مورد نظر را به object تغییر دهید. در اینصورت می توانید علاوه بر مقدار از نوع اصلی، هر گاه لازم بود مقدار DbNull.Value را به آن پارامتر نسبت دهید.

majid_darab
یک شنبه 04 بهمن 1388, 13:21 عصر
با سلام و عرض تشکر فراوان از رسیدگی حضرتعالی :
مشکل تاحدودی حل شد.
فقط فرض بفرمایید که من چند تکست باکس دارم که تکست اونها قراره به جای پارامترهای متد insert مربوط به sp gen قرار بگیره ...

مواد لازم به قرار زیرند :

1-script مربوط به insert مربوطه به صورت زیره :


ALTER Procedure [dbo].[sp_DaryaftPardakht_Insert]
@Co_ID int,
@GharardadNumber nvarchar(20) = NULL,
@GharardadMablagh int = NULL,
@Sharh nvarchar(50),
@Daryaft int = NULL,
@Pardakht int = NULL,
@Mandeh int = NULL,
@GharardadStartDateOrActDate date,
@GharardadEndDate date = NULL
As
Begin
Insert Into DaryaftPardakht
([Co_ID],[GharardadNumber],[GharardadMablagh],[Sharh],[Daryaft],[Pardakht],[Mandeh],[GharardadStartDateOrActDate],[GharardadEndDate])
Values
(@Co_ID,@GharardadNumber,@GharardadMablagh,@Sharh, @Daryaft,@Pardakht,@Mandeh,@GharardadStartDateOrAc tDate,@GharardadEndDate)

Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY

Return @ReferenceID

End
================================================== ========================
2-متد insert در کلاس ساخته شده توسط sp gen به صورت زیره (nullable ها رو به جنس object تغییر دادم - nullable استرینگو گذاشتم همون استرینگ بمونه):

[
DataObjectMethod(DataObjectMethodType.Insert)]
public static int InsertRow(int Co_ID, string GharardadNumber, object GharardadMablagh, string Sharh, object Daryaft, object Pardakht, object Mandeh, DateTime GharardadStartDateOrActDate, object GharardadEndDate)
{
int RowsAffected = 0;
int Result = 0;
DbObject dbo = new DbObject();
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("Co_ID",Co_ID),
new SqlParameter("GharardadNumber",GharardadNumber),
new SqlParameter("GharardadMablagh",GharardadMablagh),
new SqlParameter("Sharh",Sharh),
new SqlParameter("Daryaft",Daryaft),
new SqlParameter("Pardakht",Pardakht),
new SqlParameter("Mandeh",Mandeh),
new SqlParameter("GharardadStartDateOrActDate",GharardadStartDateOrActDate),
new SqlParameter("GharardadEndDate",GharardadEndDate)
};
Result = dbo.RunProcedure("sp_DaryaftPardakht_Insert", parameters, out RowsAffected);
return Result;
}
================================================== ========================
3-فرخوانی متد insert من داخل فایل cs پس از اینکه پارامترهای nullable رو در کلاس ساخته شده توسط sp gen به object تغییر دادم به صورت زیر شد :

Darman.DataLayer.DaryaftPardakht.InsertRow(
int.Parse(RadcbCompanyName.SelectedValue),
RadtxtGharardadNumber.Text,
RadNumGharardadMablagh.Text,
RadtxtSharh.Text,
RadNumtxtDaryaft.Text,
RadNumtxtPardakht.Text,
RadNumtxtMandeh.Text,
DateTime.Parse(RadMaskedtxtGharardadStartDateOrAct Date.TextWithLiterals),
DateTime.Parse(RadMaskedtxtGharardadEndDate.TextWi thLiterals));

خوب حالا هر وقت که تکست باکس پر بود مساله حله ...
اما هر وقت خالی باشه در دیتابیس عدد صفر قرار می گیره...(چه جوری در اینجا DBNull.Value رو به کار بگیرم تا تو دیتابیس هیچی وارد نشه)

majid_darab
یک شنبه 04 بهمن 1388, 14:42 عصر
آیا اینگونه عمل کردن در پارامترها درسته ؟(کار که می کنه)
به طور مثال یکی اززپارامترها رو اینجوری نوشتم:

RadNumGharardadMablagh.Text == string.Empty ? DBNull.Value : (object)RadNumGharardadMablagh.Text

nasr
پنج شنبه 20 خرداد 1389, 10:01 صبح
سلام

ضمن تشکر

من وقتی برنامه را Run می کنم به

using NovinMedia.Data;خطا میده

The type or namespace name 'NovinMedia' could not be found (are you missing a using directive or an assembly reference?)


و بعدش هم به

DbObject dbo = new DbObject();

The type or namespace name 'DbObject' could not be found (are you missing a using directive or an assembly reference?)
خطا میده

Kamarian.Reza
چهارشنبه 13 آذر 1392, 13:15 عصر
استاد، با اضافه کردن ؟ به نوع متغییر (مثلا ?int) در کلاس ساخته شده توسط SPGen ، میشه به اون متغییر مقدار null پاس داد؟