خالی رد کردن تاریخ در دیتابیس
درود دوستان
میخوام اینو درست کنم ولی نمی دونم تیکه کد تاریخ رو خالی بفرستم توی دیتابیس یا مثلا چطوری میشه تاریخ همین روز رو درون دیتابیس درج کنم
الان اگر توجه کنید میبینید که من String رو تونستم خالی بفرستم توی دیتابیس ولی Date رو نمیدونم چطوری بنویسم
http://s5.picofile.com/file/8363188818/09.png
کد من:
public bool InsertHesab() // افزودن بخش حساب
{
string command = @"INSERT into [Hesab] (Dasteh_Hesab, Mozo_Hesab, Baha_Hesab, Tarikh_Hesab, Tozihat_Hesab, Contact_ID) " +
"values (@Dasteh_Hesab, @Mozo_Hesab, @Baha_Hesab, @Tarikh_Hesab, @Tozihat_Hesab, @Contact_ID)";
List<SqlParameter> parametersList = new List<SqlParameter>();
var Dasteh_HesabParameter = new SqlParameter("@Dasteh_Hesab", string.IsNullOrEmpty(this.Dasteh_Hesab) ? string.Empty : this.Dasteh_Hesab);
var Mozo_HesabParameter = new SqlParameter("@Mozo_Hesab", string.IsNullOrEmpty(this.Mozo_Hesab) ? string.Empty : this.Mozo_Hesab);
var Baha_HesabParameter = new SqlParameter("@Baha_Hesab", string.IsNullOrEmpty(this.Baha_Hesab) ? string.Empty : this.Baha_Hesab);
//var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", this.Tarikh_Hesab);
var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", Convert.ToDateTime(Tarikh_Hesab));
var Tozihat_HesabParameter = new SqlParameter("@Tozihat_Hesab", string.IsNullOrEmpty(this.Tozihat_Hesab) ? string.Empty : this.Tozihat_Hesab);
var idParameter = new SqlParameter("@Contact_ID", ID);
parametersList.Add(Dasteh_HesabParameter);
parametersList.Add(Mozo_HesabParameter);
parametersList.Add(Baha_HesabParameter);
parametersList.Add(Tarikh_HesabParameter);
parametersList.Add(Tozihat_HesabParameter);
parametersList.Add(idParameter);
var db = new DataAccess.DatabaseManager();
var result = db.ExecuteCommand(command, parametersList);
return result;
}
مشخصات برنامه:
ویژوال استودیو
سی شارپ
دیتابیس sql
نقل قول: خالی رد کردن تاریخ در دیتابیس
چک کنید اگر تاریخ وارد نشده بود null ارسال کنید و در غیر اینصورت تاریخ را. بستگی داره Tarikh_Hesab چی هست.
var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", Tarikh_Hesab == null ? DBNull.Value : Convert.ToDateTime(Tarikh_Hesab));
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
چک کنید اگر تاریخ وارد نشده بود null ارسال کنید و در غیر اینصورت تاریخ را. بستگی داره Tarikh_Hesab چی هست.
var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", Tarikh_Hesab == null ? DBNull.Value : Convert.ToDateTime(Tarikh_Hesab));
مهندس این خطا رو میده
میخوام هیچی تو دیتابیس ذخیره نشه ، منظورم Null هست، باید هیچی تو دیتابیس ذخیره نشه
http://s3.picofile.com/file/8363258334/01.png
نقل قول: خالی رد کردن تاریخ در دیتابیس
DBNull.Value را به جاش null بزارید
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
DBNull.Value را به جاش null بزارید
ببخشید بابت طولانی شدن این سوال مبتدیانه
این خطا رو میده
http://s4.picofile.com/file/8363340976/02.png
نقل قول: خالی رد کردن تاریخ در دیتابیس
پست بالا رو دقیق دقت کنید قسمت اول شرط رو ننوشتید
Tarikh_Hesab == null ? null : Convert.ToDateTime(Tarikh_Hesab)
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
danialafshari
پست بالا رو دقیق دقت کنید قسمت اول شرط رو ننوشتید
Tarikh_Hesab == null ? null : Convert.ToDateTime(Tarikh_Hesab)
اون null null رو قبلا انجام دادم بازم نشد:عصبانی++:
این خطا رو میده
http://s3.picofile.com/file/8363383576/03.png
مهندس لینک زیر رو مطالعه میکنید، ببینید چیزی دستگیرتون میشه یا نه؟
لینک
نقل قول: خالی رد کردن تاریخ در دیتابیس
من برای تاریخ میلادی اگه تاریخ نباشه موقع ذخیره این نوشتم خوب هم عمل میکنه چه برای نمایش معادل این نوشتم چه ذخیره و یا ویرایش
insert Dates values (CASE WHEN @Dates IS NULL THEN Getdate() WHEN Dates IS NOT NULL THEN @Dates END) from table1
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
davidrobert
من برای تاریخ میلادی اگه تاریخ نباشه موقع ذخیره این نوشتم خوب هم عمل میکنه چه برای نمایش معادل این نوشتم چه ذخیره و یا ویرایش
insert Dates values (CASE WHEN @Dates IS NULL THEN Getdate() WHEN Dates IS NOT NULL THEN @Dates END) from table1
فعلا این نوع کدنویسی شما رو بلد نیستم متاسفانه
(یه جورایی تو کدنویسی زبان سی شارپ مبتدی ایم:اشتباه:)
نقل قول: خالی رد کردن تاریخ در دیتابیس
null را به object تبدیل کنید
... ? (object) null : ...
یا اینکه کلا با if ... else شرط را بررسی و مقدار پارامتر را ست کنید.
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
null را به object تبدیل کنید
... ? (object) null : ...
یا اینکه کلا با if ... else شرط را بررسی و مقدار پارامتر را ست کنید.
سپاسگزارم
درست شد
var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", Tarikh_Hesab == null ? (object)null : (Tarikh_Hesab));
سوال اول
فقط الان این خطا رو میده
با وجود این خطا ولی اطلاعات در دیتابیس ذخیره میشن
و سوال دومم
من میدونم چطوری تاریخ شمسی رو در دیتابیس ذخیره کنم و به خوبی هم تاریخ شمسی رو در گرید ویوو نمایش میدم وکلا با تبدیل تاریخ مشکلی ندارم، ولی نگران هزینه کرد آینده هستم
مهندس بنظرتون از String برای تاریخ استفاده کنم یا همین Date استفاده کنم؟
http://s4.picofile.com/file/8363448742/04.png
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
booysusa
سپاسگزارم
درست شد
var Tarikh_HesabParameter = new SqlParameter("@Tarikh_Hesab", Tarikh_Hesab == null ? (object)null : (Tarikh_Hesab));
سوال اول
فقط الان این خطا رو میده
با وجود این خطا ولی اطلاعات در دیتابیس ذخیره میشن
و سوال دومم
من میدونم چطوری تاریخ شمسی رو در دیتابیس ذخیره کنم و به خوبی هم تاریخ شمسی رو در گرید ویوو نمایش میدم وکلا با تبدیل تاریخ مشکلی ندارم، ولی نگران هزینه کرد آینده هستم
مهندس بنظرتون از String برای تاریخ استفاده کنم یا همین Date استفاده کنم؟
http://s4.picofile.com/file/8363448742/04.png
خطا مشخصه میگه تاریخ باید بین اون تاریخ های مشخص شده در خطا باشه
قبل از ایجاد تاپیک جستجو کنید
قبلاً گفته شده که توصیه نمیشه تاریخ شمسی رو در نوع date دیتابیس ذخیره کرد میتونید بصورت میلادی ذخیره و در برنامه تبدیل کنید اگر از nvarchar هم استفاده کنید مشکلی پیش نمیاد
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
danialafshari
خطا مشخصه میگه تاریخ باید بین اون تاریخ های مشخص شده در خطا باشه
قبل از ایجاد تاپیک جستجو کنید
قبلاً گفته شده که توصیه نمیشه تاریخ شمسی رو در نوع date دیتابیس ذخیره کرد میتونید بصورت میلادی ذخیره و در برنامه تبدیل کنید اگر از nvarchar هم استفاده کنید مشکلی پیش نمیاد
سپاسگزارم مهندس
nvarchar استفاده کردم ، در آینده مشکلی برای کار بر روی تاریخ پیش نمیاد؟
مثلا گزارش گیری و یا جستجو بین دوتاریخ و....
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
booysusa
سپاسگزارم مهندس
nvarchar استفاده کردم ، در آینده مشکلی برای کار بر روی تاریخ پیش نمیاد؟
مثلا گزارش گیری و یا جستجو بین دوتاریخ و....
خیر پیش نمیاد
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
booysusa
سپاسگزارم مهندس
nvarchar استفاده کردم ، در آینده مشکلی برای کار بر روی تاریخ پیش نمیاد؟
مثلا گزارش گیری و یا جستجو بین دوتاریخ و....
اگه گزارش خاص باشه چرا مشکل پیش میاد برای جای که برنامه نوشته بودم همه تاریخ ها شمسی ذخیره میکردم در nvarchar ولی حالت های مختلف گزارش نموداری بر حسب تاریخ برحسب بلوغ، جنسیت که هر لحظه به صورت نموداری بر حسب سال نشان بده از کدام سال یا ماه و یا هفته یا روز نشان بده امار نموداری چون تاریخ شمسی بود برنامه بنده با مشکل خورد بخاطر همین مجبور شدم برنامه در حال کار بود و کلی اطلاعات داشت سر گزارشات مشتری همه فیلد ها شمسی به میلادی در یک دیتابیس جدید قرار بدم و موقع انتقال از دیتابیس اول به دوم کلی فقط Script نویسی کردم که تو یک ثانیه همه اطلاعات از دیتابیس قدیم به دیتابیس جدید بدم تا برنامه با تاریخ میلادی ثبت بشه و گزارشات میلادی بررسی کنه و تاریخ شمسی نشان بده. بعضی موقع واقعا تاریخ شمسی دست پا آدم میبنده ولی میلادی چون استانداردش هستش نه با مشکل بر نمیخورید تو گزارشات
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
davidrobert
اگه گزارش خاص باشه چرا مشکل پیش میاد برای جای که برنامه نوشته بودم همه تاریخ ها شمسی ذخیره میکردم در nvarchar ولی حالت های مختلف گزارش نموداری بر حسب تاریخ برحسب بلوغ، جنسیت که هر لحظه به صورت نموداری بر حسب سال نشان بده از کدام سال یا ماه و یا هفته یا روز نشان بده امار نموداری چون تاریخ شمسی بود برنامه بنده با مشکل خورد بخاطر همین مجبور شدم برنامه در حال کار بود و کلی اطلاعات داشت سر گزارشات مشتری همه فیلد ها شمسی به میلادی در یک دیتابیس جدید قرار بدم و موقع انتقال از دیتابیس اول به دوم کلی فقط Script نویسی کردم که تو یک ثانیه همه اطلاعات از دیتابیس قدیم به دیتابیس جدید بدم تا برنامه با تاریخ میلادی ثبت بشه و گزارشات میلادی بررسی کنه و تاریخ شمسی نشان بده. بعضی موقع واقعا تاریخ شمسی دست پا آدم میبنده ولی میلادی چون استانداردش هستش نه با مشکل بر نمیخورید تو گزارشات
برای اینکه به مشکل نخورم، صفحه اول که ارسال اطلاعات بر پایه تاریخ شمسی به میلادی هست رو Date قرار میدم چون به مشکل بر نمی خورم و همیشه یک تاریخ هست که دیتابیس ارسال شود، و برای باقی صفحات غیرمهم بجای استفاده از Date از nvarcvar استفاده می کنم
سپاس بابت راهنمایی همه مهندسین عزیز
نقل قول: خالی رد کردن تاریخ در دیتابیس
نقل قول:
نوشته شده توسط
booysusa
برای اینکه به مشکل نخورم، صفحه اول که ارسال اطلاعات بر پایه تاریخ شمسی به میلادی هست رو Date قرار میدم چون به مشکل بر نمی خورم و همیشه یک تاریخ هست که دیتابیس ارسال شود، و برای باقی صفحات غیرمهم بجای استفاده از Date از nvarcvar استفاده می کنم
سپاس بابت راهنمایی همه مهندسین عزیز
شما میتوانید دیتابیس تاریخ ها میلادی قرار بدید همه رو و توسط Function قبل از ذخیره تاریخ شمسی تبدیل کنید به میلادی و موقع نمایش قبل از نمایش تاریخ میلادی به شمسی تبدیل کنید توسط اسکیول سرور.مشکلی که توسط ویندوز 10 به وجود امده چون ویندوز 10 و سرور های جدید تاریخ اش شمسی و تو برنامه چه تحت شبکه و یا Single موقع پاس دادن تاریخ میلادی مستقیم اگه ویندوز 10 باشه و شما بگید 2019-01-01 اسکیول سرور فکر میکنه دارید میگید تاریخ 2019-01-01 شمسی هستش پس خود اسکیول سرور تبدیل به میلادی کنه که تاریخ میشه 2659-05-01 میشه گفت 600 سال تاریخ میبره جلو چه مستقیم و یا با برنامه بفرستید تاریخ میلادی در ویندوزی که تاریخ شمسی داره اتوماتیک خودش تبدیل تاریخ انجام میده ولی وقتی از Function استفاده کنید مشکلی پیش نمیاد این مشکل روی نوع فیلد Date هستش و تاریخ شمسی سیستم.