PDA

View Full Version : سوال: چگونه تاریخ شمسی را در پایگاه داده ذخیره کنم؟



mehrab1387
سه شنبه 10 اسفند 1389, 19:51 عصر
من از اس کیو ال express 2008 استفاده می کنم که نوع date ندارد ولی datetime دارد که تاریخ شمسی را قبول نمیکند.من برای ذخیره تاریخ از سه فیلد string برای روز ماه وسال استفتده کردم
اما با این کار امکان جستجو مثلا از تاریخ تا تاریخ وجود ندارد برای حل این مشکل دوستان چه کار میکنند.
البته برای راحتی نصب برنامه نمیخواهم از sql standard استفاده کنم.:گریه:

mehrab1387
سه شنبه 10 اسفند 1389, 22:46 عصر
از دوستان کسی به این مشکل برخورد نکرده
کسی نیست به این بنده خدا کمک کنه

Sajjad.Aghapour
چهارشنبه 11 اسفند 1389, 00:05 صبح
تابه حال خیلی دیدم که پیشنهاد میکنند که تاریخ رو به صورت String در پایگاه داده ذخیره کنید ولی این اشتباه هستش.شما تاریخ سیستم خودتون رو روی فارسی تنظیم نمی کنید، بلکه تاریخ برنامه های خودتون رو با تاریخ سیستم تنظیم میکنید.در اینجا هم فرقی نداره، شما تاریخ رو میتونید به همون صورت DateTime و میلادی ذخیره کنید و در برنامه خودتون اون رو به شمسی فرمت کنید.

در این صورت میتونید از بروز مشکلات ناخواسته ای چون ذخیره اطلاعات اشتباه (که میتونید به عهده خود SQL Server بگذارید) جلوگیری کنید...

Nima NT
چهارشنبه 11 اسفند 1389, 00:08 صبح
تابه حال خیلی دیدم که پیشنهاد میکنند که تاریخ رو به صورت String در پایگاه داده ذخیره کنید ولی این اشتباه هستش.شما تاریخ سیستم خودتون رو روی فارسی تنظیم نمی کنید، بلکه تاریخ برنامه های خودتون رو با تاریخ سیستم تنظیم میکنید.در اینجا هم فرقی نداره، شما تاریخ رو میتونید به همون صورت DateTime و میلادی ذخیره کنید و در برنامه خودتون اون رو به شمسی فرمت کنید.

در این صورت میتونید از بروز مشکلات ناخواسته ای چون ذخیره اطلاعات اشتباه (که میتونید به عهده خود SQL Server بگذارید) جلوگیری کنید...
اینجا آیا مشکلاتی مثل یک روز کم و بیش شدن در میلادی و شمسی آیا مشکل ساز نمیشه ؟

Sajjad.Aghapour
چهارشنبه 11 اسفند 1389, 00:41 صبح
منظورتون سال کبیسه هستش؟
این مسئله قابل کنترل هست.چون ما در کلاس های(DateTime) مثل PersianCalendar متد IsLeapYear رو هم داریم که میتونید این موضوع رو مشخص کنید....
نمیدونم نحوه پیاده سازی این متدها توسط مایکروسافت به گونه ای هست که این موضوع رو کنترل بکنه یا نه، ولی من که اون رو تست کرده بودم قبلا مشکلی وجود نداشت....

mehrab1387
چهارشنبه 11 اسفند 1389, 11:48 صبح
از راهنمایی شما ممنون
اگر تاریخ را به صورت میلادی ذخیره کنم،آنگاه برای نمایش تاریخ شمسی در کریستال ریپورت چطور به شمسی تبدیل کنم؟
آیا برای اطلاعات زیاد سرعت برنامه پایین نمیاد؟
در DATETIME زمان هم ذخیره میشود،با آن چه کار کنم؟
لطفا اگر نمونه برنامه ای دارید کمک کنید؟

Sajjad.Aghapour
چهارشنبه 11 اسفند 1389, 19:47 عصر
از راهنمایی شما ممنون
اگر تاریخ را به صورت میلادی ذخیره کنم،آنگاه برای نمایش تاریخ شمسی در کریستال ریپورت چطور به شمسی تبدیل کنم؟
آیا برای اطلاعات زیاد سرعت برنامه پایین نمیاد؟
در DATETIME زمان هم ذخیره میشود،با آن چه کار کنم؟
لطفا اگر نمونه برنامه ای دارید کمک کنید؟

میتونید وقتی DataTable رو پرمیکنید با استفاده از رویداد DataTable.RowChanging اون به شمسی تبدیل کنید.درمورد زمانی که ذخیره میشه، میتونید نوع فیلدتون رو SmallDateTime بگیرید و اون از خود برنامه مقدار بهش بدید.در این صورت زمان ذخیره میشه ولی نمایش داده نمیشه(میتونید امتحان کنید: یک بار یا استفاده از متد GetDate در خود Sql Server و یک بار با استفاده از DateTime.Now.ToShortDateString از برنامه)

نمونه کد رو متاسفم D:

Sajjad.Aghapour
چهارشنبه 11 اسفند 1389, 19:47 عصر
از راهنمایی شما ممنون
اگر تاریخ را به صورت میلادی ذخیره کنم،آنگاه برای نمایش تاریخ شمسی در کریستال ریپورت چطور به شمسی تبدیل کنم؟
آیا برای اطلاعات زیاد سرعت برنامه پایین نمیاد؟
در DATETIME زمان هم ذخیره میشود،با آن چه کار کنم؟
لطفا اگر نمونه برنامه ای دارید کمک کنید؟

میتونید وقتی DataTable رو پرمیکنید با استفاده از رویداد DataTable.RowChanging اون به شمسی تبدیل کنید.درمورد زمانی که ذخیره میشه، میتونید نوع فیلدتون رو SmallDateTime بگیرید و اون از خود برنامه مقدار بهش بدید.در این صورت زمان ذخیره میشه ولی نمایش داده نمیشه(میتونید امتحان کنید: یک بار یا استفاده از متد GetDate در خود Sql Server و یک بار با استفاده از DateTime.Now.ToShortDateString از برنامه)

نمونه کد رو متاسفم D: