الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اريد اضافة قيمة null من text box الى حقل رقمي في السي شارب

بدأه نبيل.211 في 15 أبريل 2016 · 19 رد · 1,398 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم تحية طيبة وبعد

لدي فورم فيه مجموعة من التكست بوكس (text boxes) اريد ان اضيف بيانات هذة التكست بوكس الى قاعدة البيانات وهي من نوع int لكن اذا تركت واحد منtext boxt فارغ يعطيني الخطأ التالي

Input string was not in a correct format

انا استخدم اجراء مخزن قاعدة البيانات لدي من نوع sql server

الكود الخاص بالكلاس هو

public void Add_Items(string ItemCode, string ItemName, string CategorizationCode, string Size, string Origin, string Location, string Company, string Color,
       string Provenance, string Quality,  string Model, string FirstUnit, string FirstUnitBarcode, string SecondUnit,
        string SecondUnitBarcode,int SecountUnitOperatingConversion,string ThirdUnit,string ThirdUnitBarcode,int ThirdUnitOperatingConversion,
         int MaxLimitForFirstUnit,int MinLimitForFirstUnit,int OrderLimitForFirstUnit, int MaxLimitForSecondUnit ,int MinLimitForSecondUnit,
           int OrderLimitForSecondUnit, int MaxLimitForThirdUnit, int MinLimitForThirdUnit, int OrderLimitForThirdUnit, byte[] PicItem,int UnitDefault,
        string Itemserial, DateTime ProductionDate, DateTime ExpaireDate, int SaleStrategy, bool status, string criterion)
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DAL.open();
        SqlParameter[] param = new SqlParameter[36];
        param[0] = new SqlParameter("@ItemCode", SqlDbType.NVarChar, 25);
        param[0].Value = ItemCode;

        param[1] = new SqlParameter("@ItemName", SqlDbType.NVarChar, 70);
        param[1].Value = ItemName;

        param[2] = new SqlParameter("@CategorizationCode", SqlDbType.NVarChar, 25);
        param[2].Value = CategorizationCode;

        param[3] = new SqlParameter("@Size", SqlDbType.NVarChar,15);
        param[3].Value = Size;

        param[4] = new SqlParameter("@Origin", SqlDbType.NVarChar,50);
        param[4].Value = Origin;

        param[5] = new SqlParameter("@Location", SqlDbType.NVarChar, 70);
        param[5].Value = Location;

        param[6] = new SqlParameter("@Company", SqlDbType.NVarChar, 50);
        param[6].Value = Company;

        param[7] = new SqlParameter("@Color", SqlDbType.NVarChar, 30);
        param[7].Value = Color;

        param[8] = new SqlParameter("@Provenance", SqlDbType.NVarChar, 70);
        param[8].Value = Provenance;

        param[9] = new SqlParameter("@Quality", SqlDbType.NVarChar, 30);
        param[9].Value = Quality;

        param[10] = new SqlParameter("@Model", SqlDbType.NVarChar,50);
        param[10].Value = Model;

        param[11] = new SqlParameter("@FirstUnit", SqlDbType.NVarChar,50);
        param[11].Value = FirstUnit;

        param[12] = new SqlParameter("@FirstUnitBarcode", SqlDbType.NVarChar,25);
        param[12].Value = FirstUnitBarcode;

        param[13] = new SqlParameter("@SecondUnit", SqlDbType.NVarChar,50);
        param[13].Value = SecondUnit;

        param[14] = new SqlParameter("@SecondUnitBarcode", SqlDbType.NVarChar,25);
        param[14].Value = SecondUnitBarcode;

        param[15] = new SqlParameter("@SecountUnitOperatingConversion", SqlDbType.Int);
        param[15].Value = SecountUnitOperatingConversion;

        param[16] = new SqlParameter("@ThirdUnit", SqlDbType.NVarChar, 50);
        param[16].Value = ThirdUnit;

        param[17] = new SqlParameter("@ThirdUnitBarcode", SqlDbType.NVarChar, 25);
        param[17].Value = ThirdUnitBarcode;

        param[18] = new SqlParameter("@ThirdUnitOperatingConversion", SqlDbType.Int);
        param[18].Value = ThirdUnitOperatingConversion;

        param[19] = new SqlParameter("@MaxLimitForFirstUnit", SqlDbType.Int);
        param[19].Value = MaxLimitForFirstUnit;

        param[20] = new SqlParameter("@MinLimitForFirstUnit", SqlDbType.Int);
        param[20].Value = MinLimitForFirstUnit;

        param[21] = new SqlParameter("@OrderLimitForFirstUnit", SqlDbType.Int);
        param[21].Value = OrderLimitForFirstUnit;

        param[22] = new SqlParameter("@MaxLimitForSecondUnit", SqlDbType.Int);
        param[22].Value = MaxLimitForSecondUnit;

        param[23] = new SqlParameter("@MinLimitForSecondUnit", SqlDbType.Int);
        param[23].Value = MinLimitForSecondUnit;

        param[24] = new SqlParameter("@OrderLimitForSecondUnit", SqlDbType.Int);
        param[24].Value = OrderLimitForSecondUnit;

        param[25] = new SqlParameter("@MaxLimitForThirdUnit", SqlDbType.Int);
        param[25].Value = MaxLimitForThirdUnit;

        param[26] = new SqlParameter("@MinLimitForThirdUnit", SqlDbType.Int);
        param[26].Value = MinLimitForThirdUnit;

        param[27] = new SqlParameter("@OrderLimitForThirdUnit", SqlDbType.Int);
        param[27].Value = OrderLimitForThirdUnit;

        param[28] = new SqlParameter("@PicItem", SqlDbType.Image);
        param[28].Value = PicItem;

        param[29] = new SqlParameter("@UnitDefault", SqlDbType.Int);
        param[29].Value = UnitDefault;

        param[30] = new SqlParameter("@Itemserial", SqlDbType.NVarChar,70);
        param[30].Value = Itemserial;

        param[31] = new SqlParameter("@ProductionDate", SqlDbType.Date);
        param[31].Value = ProductionDate;

        param[32] = new SqlParameter("@ExpaireDate", SqlDbType.Date);
        param[32].Value = ExpaireDate;

        param[33] = new SqlParameter("@SaleStrategy", SqlDbType.Int);
        param[33].Value = SaleStrategy;


        param[34] = new SqlParameter("@status", SqlDbType.Bit);
        param[34].Value = status;

        param[35] = new SqlParameter("@criterion", SqlDbType.NVarChar,50);
        param[35].Value = criterion;

        DAL.ExecuteCommand("Add_Items", param);
        DAL.close();

    }

اما الكود في زر اضافة فهو

if (pictureBox2.Image == null)
          {
              PicItem = new byte[0];

              Item.Add_Items(txt_ItemCode.Text, txt_ItemName.Text, cmb_Ctagorization.Text, txt_Size.Text, txt_Origin.Text, txt_Location.Text, txt_Company.Text,
                             txt_Color.Text, txt_Provenance.Text, txt_Quality.Text, txt_Model.Text, txt_FirstUnit.Text, txt_FirstUnitBarcode.Text, txt_SecondUnit.Text,
                             txt_SecondUnitBarcode.Text, Convert.ToInt32(txt_SecountUnitOperatingConversion.Text), txt_ThirdUnit.Text, txt_ThirdUnitBarcode.Text, Convert.ToInt32(txt_ThirdUnitOperatingConversion.Text),
                             Convert.ToInt32(txt_MaxLimitForFirstUnit.Text), Convert.ToInt32(txt_MinLimitForFirstUnit.Text), Convert.ToInt32(txt_OrderLimitForFirstUnit.Text),
                             Convert.ToInt32(txt_MaxLimitForSecondUnit.Text), Convert.ToInt32(txt_MinLimitForSecondUnit.Text), Convert.ToInt32(txt_OrderLimitForSecondUnit.Text),
                             Convert.ToInt32(txt_MaxLimitForThirdUnit.Text), Convert.ToInt32(txt_MinLimitForThirdUnit.Text), Convert.ToInt32(txt_OrderLimitForThirdUnit.Text),
                             PicItem, UnitDefaultval, txt_Itemserial.Text, Convert.ToDateTime(mask_date_production.Text), Convert.ToDateTime(mask_expiration_date.Text), cmb_SaleStrategy.SelectedIndex, true, "without_Image");

          }

والاجراء المخزن هو

ALTER proc [dbo].[Add_Items]
@ItemCode nvarchar (25),
@ItemName nvarchar (70),
@CategorizationCode nvarchar (25),
@Size nvarchar (15),
@Origin nvarchar(50),
@Location nvarchar (70),
@Company nvarchar (50),
@Color nvarchar (30),
@Provenance nvarchar (70),
@Quality nvarchar (30),
@Model nvarchar (50),
@FirstUnit nvarchar (50),
@FirstUnitBarcode nvarchar (25),
@SecondUnit nvarchar (50),
@SecondUnitBarcode nvarchar (25),
@SecountUnitOperatingConversion int,
@ThirdUnit nvarchar (50),
@ThirdUnitBarcode nvarchar (25),
@ThirdUnitOperatingConversion int,
@MaxLimitForFirstUnit int,
@MinLimitForFirstUnit int,
@OrderLimitForFirstUnit int,
@MaxLimitForSecondUnit int,
@MinLimitForSecondUnit int,
@OrderLimitForSecondUnit int,
@MaxLimitForThirdUnit int,
@MinLimitForThirdUnit int ,
@OrderLimitForThirdUnit int ,
@PicItem image,
@UnitDefault int ,
@Itemserial nvarchar (70),
@ProductionDate date,
@ExpaireDate date,
@SaleStrategy int ,
@status bit,
@criterion nvarchar (50)
as

if @criterion='with_Image'
begin
INSERT INTO [stores].[dbo].[Items]
           ([ItemCode]
           ,[ItemName]
           ,[CategorizationCode]
           ,[Size]
           ,[Origin]
           ,[Location]
           ,[Company]
           ,[Color]
           ,[Provenance]
           ,[Quality]
           ,[Model]
           ,[FirstUnit]
           ,[FirstUnitBarcode]
           ,[SecondUnit]
           ,[SecondUnitBarcode]
           ,[SecountUnitOperatingConversion]
           ,[ThirdUnit]
           ,[ThirdUnitBarcode]
           ,[ThirdUnitOperatingConversion]
           ,[MaxLimitForFirstUnit]
           ,[MinLimitForFirstUnit]
           ,[OrderLimitForFirstUnit]
           ,[MaxLimitForSecondUnit]
           ,[MinLimitForSecondUnit]
           ,[OrderLimitForSecondUnit]
           ,[MaxLimitForThirdUnit]
           ,[MinLimitForThirdUnit]
           ,[OrderLimitForThirdUnit]
           ,[PicItem]
           ,[UnitDefault]
           ,[Itemserial]
           ,[ProductionDate]
           ,[ExpaireDate]
           ,SaleStrategy
           ,[status])
          
     VALUES
           (@ItemCode
           ,@ItemName
           ,@CategorizationCode
           ,@Size
           ,@Origin
           ,@Location
           ,@Company
           ,@Color
           ,@Provenance
           ,@Quality
           ,@Model
           ,@FirstUnit
           ,@FirstUnitBarcode
           ,@SecondUnit
           ,@SecondUnitBarcode
           ,@SecountUnitOperatingConversion
           ,@ThirdUnit
           ,@ThirdUnitBarcode
           ,@ThirdUnitOperatingConversion
           ,@MaxLimitForFirstUnit
           ,@MinLimitForFirstUnit
           ,@OrderLimitForFirstUnit
           ,@MaxLimitForSecondUnit
           ,@MinLimitForSecondUnit
           ,@OrderLimitForSecondUnit
           ,@MaxLimitForThirdUnit
           ,@MinLimitForThirdUnit
           ,@OrderLimitForThirdUnit
           ,@PicItem
           ,@UnitDefault
           ,@Itemserial
           ,@ProductionDate
           ,@ExpaireDate
           ,@SaleStrategy
           ,1)
          
end

كل ما اريده هو كيف ان اخزن قيمة الTextbox المرتبطة بحقول رقمية هي null في حالة انها فارغة

ولكم جزيل الشكر

#2

في حال كانت فارغة

يمكن اسناد قيمة DBNull.Value الى الباراميتر وستحفظ كـ null اذا كنت قد سمحت بأن تكون قيمة الحقل null في قاعدة البيانات

لتفادي مشاكل التحويل الى عدد صحيح ممكن تستخدم دالة int.TryParse بدلا من convert.Toint

ممكن تستخدم دالة isnullorwhitespace لفحص قيمة مربع نصي اذا كان فارغ ام لا قبل التحويل الى عدد ويمكن اسناد قيمة 0 كعدد صحيح بدلا من null اذا كان هذا لا يؤثر على البرنامج

if (!string.IsNullOrWhiteSpace(textbox.text))
{
}

www.gwaaly.com غوالي

#3

اشكرك اخي على الاجابة لكن بالنسبة الى  DBNull.Value  اين اضعها في اي كود ام انك تقصد اضعها في الاجراء المخزم

تم تعديل هذه المشاركة بواسطة نبيل.211 في 15 أبريل 2016 في 22:22

#4

تضعه في قيم الباراميتر في الميثود Add_Items

مثلا

param[15] = new SqlParameter("@SecountUnitOperatingConversion", SqlDbType.Int);
param[15].Value = DBNull.Value;

www.gwaaly.com غوالي

#5

للا سف  اخي Mohamed Krayem لم تنفع طلع عندي نفس الخطأ   Input string was not in a correct format.

تم تعديل هذه المشاركة بواسطة نبيل.211 في 16 أبريل 2016 في 09:10

#6

طبعا لن تنفع

عليك بتغيير باراميترات الميثود Add_Items  من int الى string أولا

www.gwaaly.com غوالي

#7

غيرت ولم تنفع طيب اخي محمد في طريقة للتحقق من القيم  isnullorwhitespace  لجميع الtext box لانه لدي حوالي 21 text box في حال كانت فارغه اعطيها null

#8

الافضل انك تتعامل مع كل مربع نص لحاله لان عندك مربعات نصية تستخدمها لادخال قيم رقمية

عموما هذه دالة تفحص كل مربعات النص في الفورم واذا كانت فارغة يمكن اسناد قيمة لها

ربما يمكنك الاستفادة منها

foreach (Control x in this.Controls)
{
  if (x is TextBox)
  {
    ((TextBox)x).Text = String.Empty;
  }
}

بالمناسبة ،،

اذا غيرت الباراميترات الى STRING وتحققت من المدخلات داخل ميثود ADD_ITEMS ستنجح

www.gwaaly.com غوالي

#9

شكرا لك والله يجزيك الخير اخي محمد اعذرني فانا جديد على البرمجة مالي غير شهر واحد كيف بدي اغير الباراميترات الى string وهي في الاجراء المخزن وفي الجدول اما int او decimal  اعتذر منك يمكن مللتك بالاسئلة فاعذرني والله لاني جديد في هذا المجال

#10

بالضبط

ارسل كل المدخلات على انها STRING

ثم قم بتحويل الخانات المطلوبة الى INT او DECIMAL في قيمة الباراميتر VALUE

مثال txt_SecountUnitOperatingConversion.Text لا تقم بتحويلها الى INT32 من الفورم

وانما حول داخل الميثود وتحقق من القيمة اذا كانت NULL

مثال

            param[15] = new SqlParameter("@SecountUnitOperatingConversion", SqlDbType.Int);
            if (!string.IsNullOrWhiteSpace(SecountUnitOperatingConversion))
            {
                param[15].Value = Convert.ToInt32(SecountUnitOperatingConversion);
            }
            else
            {
                param[15].Value = DBNull.Value;
            }

لاحظ انني لم أغير نوع البيانات المرسلة الى قاعدة البيانات ومازالت SqlDbType.Int

www.gwaaly.com غوالي

#11

اشكرك اخي جدا سوف اعمل مثل ما ذكرت وارد لك خبر 

#12

لدي سؤال هل تنفع مع حقل dateTime ايضاً

#13

نعم

1

www.gwaaly.com غوالي

#14

جربت لكن طلعلي هذا الخطأ Failed to convert parameter value from a String to a Decimal.

#15
param[15] = new SqlParameter("@SecountUnitOperatingConversion", SqlDbType.DateTime);
            if (!string.IsNullOrWhiteSpace(SecountUnitOperatingConversion))
            {
                param[15].Value = Convert.ToDateTime(SecountUnitOperatingConversion);
            }
            else
            {
                param[15].Value = DBNull.Value;
            }
#16

جربت لكن طلعلي هذا الخطأ Failed to convert parameter value from a String to a Decimal.

 

#17

عفوا، ليش تحول لـ decimal

لا يوجد حقل من نوع decimal في الاجراء المخزن

www.gwaaly.com غوالي

#18

اخي عندي اجرائين مخزنين انا عطيتك قسم من الكود لان الكود طويل بس طبقت مثل ما قلتلي على كل الميثود الموجود عندي هلا انا مابعرف يمكن شغلي غلط انو يكون فيه كل هاد العدد من البارمترات شكلي رح ارجع اشتغل بطريقة الاستعلام داخل الكود والغي الاجراءات المخزنه يمكن احسن

ALTER proc [dbo].[Add_ItemNormalPrices]
@ItemCode nvarchar (25),
@WholeSaleForFirstUnit decimal(18, 3),
@WholeSaleForSecondUnit decimal(18, 3),
@WholeSaleForThirdUnit decimal(18, 3),
@HalfWholeSaleForFirstUnit decimal(18, 3),
@HalfWholeSaleForSecondUnit decimal(18, 3),
@HalfWholeSaleForThirdUnit decimal(18, 3),
@DistributorForFirstUnit decimal(18, 3),
@DistributorForSecondUnit decimal(18, 3),
@DistributorForThirdUnit decimal(18, 3),
@ExportForFirstUnit decimal(18, 3),
@ExportForSecondUnit decimal(18, 3),
@ExportForThirdUnit decimal(18, 3),
@RetailForFirstUnit decimal(18, 3),
@RetailForSecondUnit decimal(18, 3),
@RetailForThirdUnit decimal(18, 3),
@EndUserForFirstUnit decimal(18, 3),
@EndUserForSecondUnit decimal(18, 3),
@EndUserForThirdUnit decimal(18, 3),
@PriceDefault int,
@AManufacturing bit
as
INSERT INTO [stores].[dbo].[ItemNormalPrices]
           ([ItemCode]
           ,[WholeSaleForFirstUnit]
           ,[WholeSaleForSecondUnit]
           ,[WholeSaleForThirdUnit]
           ,[HalfWholeSaleForFirstUnit]
           ,[HalfWholeSaleForSecondUnit]
           ,[HalfWholeSaleForThirdUnit]
           ,[DistributorForFirstUnit]
           ,[DistributorForSecondUnit]
           ,[DistributorForThirdUnit]
           ,[ExportForFirstUnit]
           ,[ExportForSecondUnit]
           ,[ExportForThirdUnit]
           ,[RetailForFirstUnit]
           ,[RetailForSecondUnit]
           ,[RetailForThirdUnit]
           ,[EndUserForFirstUnit]
           ,[EndUserForSecondUnit]
           ,[EndUserForThirdUnit]
           ,[PriceDefault]
           ,[AManufacturing])
     VALUES
           (@ItemCode
           ,@WholeSaleForFirstUnit
           ,@WholeSaleForSecondUnit
           ,@WholeSaleForThirdUnit
           ,@HalfWholeSaleForFirstUnit
           ,@HalfWholeSaleForSecondUnit
           ,@HalfWholeSaleForThirdUnit
           ,@DistributorForFirstUnit
           ,@DistributorForSecondUnit
           ,@DistributorForThirdUnit
           ,@ExportForFirstUnit
           ,@ExportForSecondUnit
           ,@ExportForThirdUnit
           ,@RetailForFirstUnit
           ,@RetailForSecondUnit
           ,@RetailForThirdUnit
           ,@EndUserForFirstUnit
           ,@EndUserForSecondUnit
           ,@EndUserForThirdUnit
           ,@PriceDefault
           ,@AManufacturing)
#19

اخي هل نجحت الطريقة مع الاجراء الاول اللي فيه int و string فقط؟

www.gwaaly.com غوالي

#20

لا لم تنجح

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…