معرفی
سلام به همگی امیدوارم حالتون خوب باشه همه ما از پارامترهای SQL در برنامه های خود استفاده می کنیم، درست است؟ بله، این یک راه خوب برای جلوگیری از ربودن با تزریق است. اما باز هم اگر آن پارامترها را به درستی پاس کنید، با مشکلات زیادی مواجه خواهید شد. در این مقاله من چنین مسئله ای را با شما به اشتراک می گذارم. امیدوارم از آن خوشت بیاید.
زمینه
امروز صبح روی یک کنترل گرید کار می کردم که قابل ویرایش است و یک ردیف را برای ویرایش انتخاب کردم و شروع به ویرایش کردم. در یک فیلد تاریخ، تاریخ را ویرایش کردم و روی دکمه به روز رسانی کلیک کردم. من انتظار داشتم نتیجه خروجی به عنوان "با موفقیت به روز شد". اما این اتفاق نیفتاد. در عوض خطا می دهد. "SqlDateTime Overflow، باید بین باشد"
با استفاده از کد
برای حل این مشکل، ابتدا باید علت اصلی آن را درک کنید. من پارامترها را به صورت زیر پاس می کردم.
- SqlParameter[] myParam = new SqlParameter[3];
- myParam[0] = new SqlParameter("@name", myObject.name);
- myParam[1] = new SqlParameter("@ValidFrom", myObject.hjcValidFrom);
- myParam[2] = new SqlParameter("@ValidTo", myObject.hjcValidTo);
وقتی برنامه خود را با کد قبلی اجرا می کنم، با خطای زیر مواجه می شوم.
رفع / راه حل
پارامتر را به صورت زیر تغییر دادم.
- SqlParameter[] myParam = new SqlParameter[3];
- myParam[0] = new SqlParameter("@name", myObject.name);
- myParam[1] = new SqlParameter("@ValidFrom", myObject.hjcValidFrom.ToString("MM/dd/YYYY"));
- myParam[2] = new SqlParameter("@ValidTo", myObject.hjcValidTo.ToString("MM/dd/YYYY"));
که موضوع حل شد. ساده است، درست است؟
یه مورد دیگه
موارد دیگری نیز وجود دارد که ممکن است این خطا را دریافت کنید. برای مثال اگر از کد زیر استفاده کنید.
- SqlParameter[] myParam = new SqlParameter[3];
- DateTime myDate=new DateTime();
- myParam[0] = new SqlParameter("@name", myObject.name);
- myParam[1] = new SqlParameter("@ValidFrom", myDate);
- myParam[2] = new SqlParameter("@ValidTo", myDate);
کاری که برای رفع این مشکل باید انجام دهید این است که فقط مقدار ویژگی now را از شی date time خود بگیرید و پارامتر خود را به آن ارسال کنید.
- SqlParameter[] myParam = new SqlParameter[3];
- DateTime myDate = DateTime.Now;
- myParam[0] = new SqlParameter("@name", myObject.name);
- myParam[1] = new SqlParameter("@ValidFrom", myDate);
- myParam[2] = new SqlParameter("@ValidTo", myDate);
نتیجه گیری
امیدوارم از خواندن لذت برده باشید و این مطلب مفید بوده باشد. لطفا نظرات ارزشمند خود را با من در میان بگذارید. برای من خیلی مهمه
با احترام،
سیبیش ونو