View Full Version : فيلدي كه مقدار null نمي گيرد در صورتيكه اجازه ي null گرفتنش تنظيم شده
بیتافرهی
چهارشنبه 03 مهر 1387, 07:11 صبح
سلام
من يه جدول دارم به نام جدول كالا كه اطلاعات هر يك از فيلد هاي اين جدولم از طريق ارتباط از نوع كليد خارجي از جداول ديگر تامين مي شود.(به جز يكي از فيلد هايش كه از نوع كليد اصلي و identity است)
مشكلم اينجاست وقتي در بعضي از اين فيلد هاي جدول كالا ،مقداري را وارد نمي كنم و بعد كليد insert را مي زنم تا اطلاعات را وارد جدول كالا كند ، ،برنامه error مي دهد كه از لحاظ كليد خارجي تناقض به وجود آمده در صورتي كه من فيلد هاي جدول كالا را طوري طراحي كردم كه بتوانند مقدار null را بگيرند ،پس قاعدتا اگر مقداري وارد نكردم نبايد ايراد بگيرد.مشكل از كجاست؟اينم پيغامي كه مي دهد :
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tbl_computer_component_tbl9_fdd". The conflict occurred in database "iso3", table "dbo.tbl9_fdd", column 'id'.
The statement has been terminated.
sheitoonbala
چهارشنبه 03 مهر 1387, 14:15 عصر
سلام ، متن خطا میگه که مشکل از فیلد id هست.بررسی کنید که این فیلد ایرادی از لحاظ PK بودن و identity نداشته باشد.
بیتافرهی
چهارشنبه 03 مهر 1387, 14:28 عصر
اون فيلدم در جدول اصلي هم pk است و هم identity.
اما من مقدار تكراري يا مقداري كه در جدول اصلي نباشد وارد نكردم.
sheitoonbala
چهارشنبه 03 مهر 1387, 14:40 عصر
یه عکس از design جدولتون بگیرید و بذاریدش اینجا که ببینیم...
hamed aj
چهارشنبه 03 مهر 1387, 14:55 عصر
سلام
من فکر می کنم شما یک رشته ی خالی به این فیلد پاس می دین. در صورتی که اگه می خواین null بگیره اصلاً چیزی نباید پاس بدین و دیتابیس خودش null رو set میکنه
بیتافرهی
چهارشنبه 03 مهر 1387, 17:21 عصر
من فکر می کنم شما یک رشته ی خالی به این فیلد پاس می دین. در صورتی که اگه می خواین null بگیره اصلاً چیزی نباید پاس بدین و دیتابیس خودش null رو set میکنه
بله.منم به همين نتيجه رسيدم.ولي نمي دونم چطوري اصلاحش كنم.چون من طوري كد را نوشته ام كه موقعي كه كاربر دكمه ي insert را فشار داد ، اطلاعات همه ي فيلد ها به جدول وارد شود.آيا راهي ندارد كه sql رشته ي تهي را به عنوان null قبول كند؟ اين قسمتي از اون كدم است كه نوشتم:
objcommand.CommandText = "insert into tbl_computer_component " +
" (computer_idf,id_cpu_f,id_mb_f,id_ram_f,id_vga_f,i d_nic_f,id_sound_f,id_modem_f,id_hdd_f,id_fdd_f,id _power_f,id_chassis_f,id_monitor_f,id_keyboard_f,i d_mouse_f)" +
"values(@computer_idf,@id_cpu_f,@id_mb_f,@id_ram_f, @id_vga_f,@id_nic_f,@id_sound_f,@id_modem_f,@id_hd d_f,@id_fdd_f,@id_power_f,@id_chassis_f,@id_monito r_f,@id_keyboard_f,@id_mouse_f)";
objcommand.Parameters.AddWithValue("@computer_idf", textBox2.Text);
objcommand.Parameters.AddWithValue("@id_cpu_f", comboBox1.Text);
objcommand.Parameters.AddWithValue("@id_mb_f", textBox4.Text);
hamed aj
چهارشنبه 03 مهر 1387, 17:50 عصر
فکر می کنم باید اینطوری بنویسید :
if (textBox2.Text <> "") then
objcommand.Parameters.AddWithValue("@computer_idf", textBox2.Text);
sheitoonbala
چهارشنبه 03 مهر 1387, 21:49 عصر
سلام. در ادامه پاسخ دوستمون بايد عرض کنم بايستي دستور If بالا قسمت else هم داشته باشه که با Error مواجه نشيد. به اين صورت :
if (textBox2.Text != "") then
objcommand.Parameters.AddWithValue("@computer_idf", textBox2.Text);
else
objcommand.Parameters.AddWithValue("@computer_idf", null);
کم حوصله
پنج شنبه 04 مهر 1387, 08:20 صبح
سلام
میشه اینکار را هم سمت اس کیو ال کرد ولی سمت برنامه به صورتی که دوستان گفتند بهتره چون میتوانید مواردی دیگر هم اگر داشتید چک کنید
این روش اس کیو ال
objcommand.CommandText = "insert into tbl_computer_component " +
"(computer_idf,id_cpu_f,id_mb_f,id_ram_f,id_vga_f,i d_nic_f,id_sound_f,id_modem_f,id_hdd_f,id_fdd_f,id _power_f,id_chassis_f,id_monitor_f,id_keyboard_f,i d_mouse_f)" +
"values(NullIf(@computer_idf,'') ,NullIf(@id_cpu_f,'') ,NullIf(@id_mb_f,'') ,NullIf(@id_ram_f,'') ,NullIf(@id_vga_f,'') ,NullIf(@id_nic_f,'') ,NullIf(@id_sound_f,'') ,NullIf(@id_modem_f,'') ,NullIf(@id_hdd_f,'') ,NullIf(@id_fdd_f,'') ,NullIf(@id_power_f,'') ,NullIf(@id_chassis_f,'') ,NullIf(@id_monitor_f,'') ,NullIf(@id_keyboard_f,'') ,NullIf(@id_mouse_f, ''))";
objcommand.Parameters.AddWithValue("@computer_idf", textBox2.Text);
objcommand.Parameters.AddWithValue("@id_cpu_f", comboBox1.Text);
objcommand.Parameters.AddWithValue("@id_mb_f", textBox4.Text);
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.