نوشته شده توسط
majid_darab
حق با شماس،
به خاطر فضای خالی زیر کدهای بالا به اشتباه افتادم.
این که دوست عزیزمون این اسکریپت رو گذاشتن یعنی اینکه ایشون هم سمت sql server تاریخ ها رو میلادی دارن.
کلاس هایی در دات نت و C# داریم که Calendar رو به Persian تبدیل می کنند و روش اینکه در کل اپلیکیشن کل تاریخ ها شمسی شوند بسیار ساده است.
اما مشکل اینجاست که سمت دیتابیس تاریخ ها میلادی ذخیره می شن موقع Insert در دیتابیس.
من دنبال روشی هستم که موقع Insert تاریخ ها شمسی در دیتابیس ذخیره بشن.
آیا راه کاری برای این موضوع وجود داره؟
بله خیلی ساده هم هستش تبدیل تاریخ سمت سرور بدوه هیچ مشکلی
این دستور ذخیره تاریخ روی دیتابیس هستش
INSERT INTO Tbl_Ebtal_Shenasname
(ESH_CM_Code_Mali, ESH_SHS_ShomareSanad, ESH_Mahal_Sabt, EHS_Username, ESH_Date_Sabt_Sanad, ESH_Time, ESH_IP)
VALUES ( @ESH_CM_Code_Mali, @ESH_SHS_ShomareSanad, @ESH_Mahal_Sabt, @EHS_Username,(select dbo.ShamsiToMiladi( @ESH_Date_Sabt_Sanad)), @time, @ESH_IP)
حالا این قسمت توجه کنید. درست تاریخ شمسی شما ارسال میکنید به سمت سرور اون پارامتری که معرفی کردید روی برنامه رو میگیرید و تاریخ شمسی به اون پارامتر میفرستید و اون تاریخ میبینی شمسی هستش قبل از ذخیره تبدیل میشه به میلادی و ذخیره میشه داخل دیتابیس
INSERT INTO Tbl_Ebtal_Shenasname
(ESH_Date_Sabt_Sanad)
VALUES ((select dbo.ShamsiToMiladi( @ESH_Date_Sabt_Sanad)))
حالا برعکس اش تاریخ روی دیتابیس میلادی ولی شمسی میخواهی مشاهده کنید.
تبدیل تاریخ میلادی به شمسی روی دیتابیس و نمایش روی یتاگرید ویو یا هرجا دیگه
SELECT ESH_ID, ESH_CM_Code_Mali, ESH_SHS_ShomareSanad, ESH_Mahal_Sabt, EHS_Username,
(select [dbo].[MakeCompleteShmsiDate](Tbl_Ebtal_Shenasname.ESH_Date_Sabt_Sanad , '/')) AS ESH_Date_Sabt_Sanad, ESH_Time, ESH_IP
FROM Tbl_Ebtal_Shenasname
اینجا توجه کنید.
اون فیلدی که نیاز دارم از دیتابیس میگیرم و میبینی تاریخ میلادی همون لحظه تبدیل میکنه به شمسی هرچندتا باشه میشه شمسی.
SELECT (SELECT dbo.MakeCompleteShmsiDate(Tbl_Ebtal_Shenasname.ESH _Date_Sabt_Sanad, '/') AS Expr1) AS ESH_Date_Sabt_Sanad
FROM Tbl_Ebtal_Shenasname
فقط یه نکته قبل از ارسال تاریخ به سمت سرور یا برعکس نمایش از سرور حتما تاریخ جود داشته باشه یعنی چی موقع ثبت تاریخ درست بیدن و یا برعکس تاریخ میلادی در دیتابیس باشه.
خود من یه کلک رشتی زدم بابت این موضوع قبل از ذخیره تاریخ تو یک کادر متن مخفی وقتی کاربر تاریخ میده حتی یک عدد کم بده کادر متن خالی میشه اگه درست بده کادر متن تاریخ میلادی میگیره یعنی تاریخ به شمسی میده درست باشه معادلش میلادی میشه در کادر متن مخفی برای اینکه بدانم کاربر تاریخ درست میشه اگه معادل داشته باشه و معادل ذخیره نمیکنم و همون شمسی ذخیره میکنم برای اینکه بهش نشان بدم چقدر برنامه هوشمند عمل میکنه تاریخ داده درست ولی تاریخ اسفند 29 روزه هستش نه 30 روز چون تاریخ 30 روز نداریم بهش میگم تاریخ اشتباه لطفا تاریخ درست بده که این طوری از داده تاریخ اشتباه قبل از ذخیره و همین طور از به وجود آمدن تمام خطا ها جلوگیری میکنم.
و برعکس اگه بخوان تاریخ میلادی شمسی نشان میدم باید تاریخ موجود باشه نباشه سیستم ایراد میگیره برای اینکه برای اونهایی که هنوز تاریخ ندارن سیستم بهش گیر نده یه دستور شرطی داخل کوئری ام مینویسم و سیستم اونهای که تاریخ نداره بهش گیر نمیده به صورت خیلی ساده.
select CASE WHEN Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Deat h IS NULL
THEN N'' WHEN Tbl_Sabt_Motovafy_Gabz_Pesh_And_Sanad_Gabr.SM_Deat h IS NOT NULL THEN
(SELECT dbo.MakeCompleteShmsiDate(Tbl_Sabt_Motovafy_Gabz_P esh_And_Sanad_Gabr.SM_Death, '/') AS Expr1) END AS SM_Death
from Table1
با این دستور اون فیلدهای که تاریخ ندارن میبینه تاریخ نداره موقع نمایش خالی نشان میدم اگه تاریخ داشت تبدیل میکنم به شمسی تاریخ رو