سلام
تاريخ روزموردنظرم رادربانك اطلاعاتي بصورت Date Timeبه ميلادي ذخيره مي كنيم حال مي خواهم وقتي درفرم مربوطه اطلاعات رانمايش بدهم تاريخ بصورت شمسي باشد
مثلا تاريخ بصورت2010/05/07ذخيره شده است امادرفرم مي خواهم معادل همان روز89/02/17نمايش داده شود
سلام
ببخشيدمن منظورم راخوب نرساندم جواب خوبي هم نگرفتم
مشكل من اينجاست كه ازطريق كامپونت تاريخ راكاربربصورت شمسي انتخاب مي كنه امادربانك بصورت ميلادي ثبت مي كنه
حال مي خواهم درهنگام لودصفحه ونمايش داده ها تاريخ بصورت ميلادي نمايش داده مي شود كه من مي خواهم بصورت شمسي باشد
خب مهندس کارت اشتباس
با این کار شما باید 2 تا فیلد داشته باشی اوای تاریخ میلادی و دومی تاریخ شمسی
موقع insert باید هم میلادی و هم شمسی وارد کنی تاریخها رو و موقع جستجو بر اساس میلادی جستجو کنی و شمسی رو نشون بدی
این کار یک روش پر دردسر و باعث افزونگی بانک هم میشه
شما میتونی یه کار راحتر بکین
شما تاریخ رو از کاربر شمسی بگیر موقع insert // ها رو بردار و تاریه رو به صورت یک مقدار عددی بریز تو بانک موقع نمایش یه تابع بنویس که // به تاریخ خروجی اضافه کنه
تو یک تاپیکی اینو توضیح داده بودم + تابع sqlش
(سرچش پای خودت)
سلام اینکه تاریخ رو میلادی ذخیره کنی و موقع نمایش تبدیل کنی .... ایرادش چیه؟
حسین جان خودت حساب مدت زمان تبدیل تاریخ میلادی به شمسی رو تو یه query که خروجیش 1000 تا رکورد هست حساب کن+منابعی که به این علت بیهوده مصرف میشه
اگه شما این کارو رویه سرور شبکه انجام بدی که مثلا 5 تا یوزر بهش وصل بشن و واکشی بالا داشته باشن دیگه خودت حساب کن برادر
( :d میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی :d )
سلام
آها از اون لحاظ بخای حساب کنی آره ، ولی اگه از LINQ to SQL استفاده بشه و بجای store procedure یا function اس کیو ال از توابع خود زبان application استفاده کنی(با وجود LINQ این امکان وجود داره) اونوقت پردازش تبدیل تاریخ میاد تحت کلاینت انجام میشه و دیگه اون مشکلی که شما گفتی نادیده گرفته میشه...
نقل قول: ( Biggrin میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی Biggrin )
eee اس کیو ال از تاریخ فارسی هم پشتیبانی میکنه؟ نمیدونستم از چه نسخه ای به بعد؟
نقل قول: حسین جان خودت حساب مدت زمان تبدیل تاریخ میلادی به شمسی رو تو یه query که خروجیش 1000 تا رکورد هست حساب کن+منابعی که به این علت بیهوده مصرف میشه
اگه شما این کارو رویه سرور شبکه انجام بدی که مثلا 5 تا یوزر بهش وصل بشن و واکشی بالا داشته باشن دیگه خودت حساب کن برادر
( میری sqlserver 2008 با پشتیبانی تاریخ فارسی نصب میکنی و دردسر نمیکشی )
میشه راجب تاریخ فارسی در SQl server 2008 یه کم توضیح بدی. من دیدم فقط Collation فارسی بهش اضافه شده بود.
بعد راجب Query گرفتن هم از این روشی که گفتین توضیح میدین.
میخوام بدونم تبدیل میلادی به شمسی به نظر شما فرایند سنگینیه آن هم در Client؟
فرایند رو تحت کلاینت بیاری فقط اون بار رو از رو سرور به کلاینتها منتقل میکنی
در کلاینتها با استفاده از application شما باید تو یه حلقه تمام رکوردها رو پیمایش و روال تغییر تاریخ و زمانبر بودن به قوت خودش باقیه
از sql2005 به بعد شما میتونین یک دیتا تایپ مجازی برای خودتون ایجاد کنید با استفاده از این قابلیت شما میتونین یک دیتاتایپ برای تاریخ شمسی به sql server اضافه کنین و ازش استفاده کنین
(منظورم این بود ، تو پست 6 فکر کنم منظورمو بد رسوندم)
من به شخصه از این روش استفاده میکنم
ابتدا ما فیلد تاریخ رو به صورت int در نظر بگیریم و موقع وارد کردن اطلاعات // های بین تاریخ رو برداریم یعنی 1388/01/07 رو به صورت 13880107 وارد میکنیم و با استفاده از یک تابع در سمت sql در هنگام نمایش خروجی // ها رو به خروجی اضافه می کنیم
کد:
CREATE FUNCTION separate_date(@intdate int)
RETURNS char(10)
AS
BEGIN
declare @sam char(8)
declare @dat char(10)
set @sam=convert(char(10),@intdate);
set @dat=substring(@sam,1,4)+'/'+substring(@sam,5,2)+'/'+substring(@sam,7,2)
return @dat
END
GO
چون پردازش روی فیلد عددی صورت میگیره پس طبعا سرعت بالاتری نسبت به روشهای دیگه خواهد داشت
برای استفاده از تابع فوق به صورت زیر عمل میکنیم
کد:
select dbo.separate_date(date) from tble
Date:نام فیلد تاریخ میباشد
table: نام جدول مورد نظر می باشد
توجه برای استفاده از توابعی به غیر از توابع اصلی sql قبل از استفاده باید dbo اعلان شود
مبین جان تبدیل تاریخ حتی 1000 رکود کار سنگینی نیست چون فقط یک بار اجرا میشه (در کلاینت) اما اگه این کار رو توی سرور داشته باشیم آره میشه گفت کمی سنگین میشه (اونم در مواردی که تعداد کاربران سرور انگشت شمار نباشه) ، به نظر میاد اگه این زحمت تبدیل رو بدیم به کلاینت مشکلی نباشه.
در رابطه با روش شما هم الان حضور ذهن ندارم ولی قبلا یادم هست که چند تا نقص ازش پیدا کرده بودم...
نمونه کوئری که تبدیل بر دوش کلاینته (LINQ):
کد:
DataBaseDataContext db = new DataBaseDataContext();
datagrid1.datasource=from s in db.Table where s.date=DateTime.Now() select new {miladi2shamsi(s.date) };
فرض کردیم تابع miladi2shamsi رو قبلا توی سی شارپ تعریف کردیم
نام جدولمون table
و نام کلاس پایگاه دادمون DataBaseDataContext است