PDA

View Full Version : سوال: مشکل با NULL



hamed_kaveyani
یک شنبه 16 اسفند 1388, 11:51 صبح
سلام.
من در دیتابیس برای چند فیلد از نوع int , varchar و bit اجازه دریافت null داده ام. حالا وقتی پارامترهای ارسالی را با DBNull.Value مقدار میدم برای intها مقدار صفر و برای bitها مقدار false میریزه. لطفا راهنمایی بفرمایید
سپاسگذارم.

hamed_kaveyani
یک شنبه 16 اسفند 1388, 13:39 عصر
من خیلی سرچ زدم یه جا گفته بود پارامترها را از نوع Object پاس بده این کار هم کردم فایده نداشت

Saber_Fatholahi
یک شنبه 16 اسفند 1388, 13:58 عصر
دوست من اگه اینجوریه اصلا نیاز نیست هیچی پاس بدی خودش اتوماتیک وقتی مقدار بهش ندی اونو null در نظر میگیره
موفق باشی

hamed_kaveyani
یک شنبه 16 اسفند 1388, 14:26 عصر
من از طریق sp بانک را پر میکنم و چون بعضی وتها مقدار داره و بعضی وتها نداره پس باید حتما پارامتر پاس بشه. (مثلا مقدار یک تکست باکس). وقتی تکست خالی باشه همون پارامتر باعث میشه مقدار صفر به بانک اضافه بشه.

hamed_kaveyani
یک شنبه 16 اسفند 1388, 17:58 عصر
آقای فتح اللهی عزیز من مقدار textbox را میخونم و در یک متغیر میریزم. چه مقدار داشته باشه چه نداشته باشه اونو همراه بقیه پارامترها به sp میفرستم اگه مقدار داشته باشه مشکلی نیست ولی اگه مقدار نداشته باشه صفر میفرسته



cmd.Parameters.AddWithValue("@ovlad",ovlad11);

Milad Mohseny
یک شنبه 16 اسفند 1388, 23:04 عصر
براي پاس دادن مقدار NULL از DBNull.Value استفاده كن:مثلاً چك كن اگه ovlad11 خالي بود بجاي ovlad11 مقدار DBNull.Value رو پاس بده.
البته اگه نشد دقت كن در تعريف پارامتر هاي sp تو sqlserver پارامتر هايي رو كه ميتونن مقدار null بگيرند رو مثلاً مثل زير تعرف كن:

@Family nvarchar(25) = NULL

اين لينك رو هم ببين:
http://www.dotnetspider.com/resources/4756-Pass-NULL-Parameter-Value-SQLParameter.aspx

Mostafa_Dindar
یک شنبه 16 اسفند 1388, 23:47 عصر
آقای فتح اللهی عزیز من مقدار textbox را میخونم و در یک متغیر میریزم. چه مقدار داشته باشه چه نداشته باشه اونو همراه بقیه پارامترها به sp میفرستم اگه مقدار داشته باشه مشکلی نیست ولی اگه مقدار نداشته باشه صفر میفرسته


cmd.Parameters.AddWithValue("@ovlad",ovlad11);



فيلد و پراپرتي هاي پارامتر رو Nullable تعريف كنيد(به علامت ؟ دقت كنيد) :

private int? _newsId ;
public int? NewsId
{
get { return _newsId; }
set { _newsId = value; }
}

اگر Nullable نباشند هر متغير عددي به صفر ، هر مقير بولي به فالس كه در ديتابيس به صفر و .... تبديل ميشوند

اين در صورتي هست كه از Object براي ارسال پارامتر استفاده كني . در غير اينصورت( در صورتي كه با آبجكت ها كار نميكني مثل SqlDataSource اگر پارامتر رو ارسال نكني خودش نال ميشه و لازم نيست كار ديگري انجام بدي

hamed_kaveyani
دوشنبه 17 اسفند 1388, 06:35 صبح
آقا میلاد عزیز من همه اون کارها را کردم ولی مشکل پابرجاست

hamed_kaveyani
دوشنبه 17 اسفند 1388, 06:37 صبح
فيلد و پراپرتي هاي پارامتر رو Nullable تعريف كنيد(به علامت ؟ دقت كنيد) :
1.
private int? _newsId ;
2.
public int? NewsId
3.
{
4.
get { return _newsId; }
5.
set { _newsId = value; }
6.
}


اگر Nullable نباشند هر متغير عددي به صفر ، هر مقير بولي به فالس كه در ديتابيس به صفر و .... تبديل ميشوند



من نمیخوام صفر بریزه میخوام با sp بفرستم و null بفرستم

Mostafa_Dindar
دوشنبه 17 اسفند 1388, 09:40 صبح
من نمیخوام صفر بریزه میخوام با sp بفرستم و null بفرستم

خوب كه چي ؟ اينو قبلا هم گفته بودي و منم جواب دادم .

Milad Mohseny
دوشنبه 17 اسفند 1388, 21:56 عصر
سلام
ببين اين دقيقاً كاريه كه من انجام ميدم و همين اطلات هم تست كردم NUll اينسرت شد.
راستي حتماً تو قسمت Design جدولت برو و Default Vaule or Binding فيلد مورد نظرت رو نگاه كن بايد خالي باشه اگه نبود خاليش كن.
اين نمونه اي از Procedure
create Procedure [dbo].[sp_Insert]
@TypeId tinyint,
@Cost bigint = null
As
Begin
...
END

اينم نمونه كد سمت سرور
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("TypeId",DrpType.SelectedValue) ,
new SqlParameter("Cost",DBNull.Value)
};
SqlCommand sqlCmd = new SqlCommand(strCmd, sqlCnt);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddRange(parameters);
sqlCmd.ExecuteScalar();

bachebahal_1363
دوشنبه 17 اسفند 1388, 22:11 عصر
فيلد و پراپرتي هاي پارامتر رو Nullable تعريف كنيد(به علامت ؟ دقت كنيد) :


view sourceprint?
1.private int? _newsId ;
2.
public int? NewsId
3.
{
4.
get { return _newsId; }
5.
set { _newsId = value; }
6.
}


اگر Nullable نباشند هر متغير عددي به صفر ، هر مقير بولي به فالس كه در ديتابيس به صفر و .... تبديل ميشوند

اين در صورتي هست كه از Object براي ارسال پارامتر استفاده كني . در غير اينصورت( در صورتي كه با آبجكت ها كار نميكني مثل SqlDataSource اگر پارامتر رو ارسال نكني خودش نال ميشه و لازم نيست كار ديگري انجام بدي

دقیقا کاری که شما میخواین رو انجام میده خواهش یک بار هم که شده روش ها رو امتحان کنید

keyvan_n
سه شنبه 18 اسفند 1388, 01:27 صبح
ببین دوست عزیز، bachebahal راهنمایی درستی کرده.
برای توضیح بیشتر عرض کنم که متغیر int به طور پیش فرض مقدار صفر داره و bool مقدار false. اگه شما بخواید که مقدار null رو در این متغییر ها قرار بدید باید از علامت سوال جلوی Type استفاده کنید. اینجوری:


int? x;


حالا متغییر شما Nullable خواهد بود.

hamed_kaveyani
سه شنبه 18 اسفند 1388, 07:26 صبح
از لطف عزیزانم ممنونم. انشاا... هر مشکلی دارید خداوند بزرگ حلش کنه.
با راهنمایی های شما عزیزان مشکل حل شد
این هم به افتخار شما دوستان گل :تشویق::تشویق::تشویق: