بچه های بوکان

بچه های بوکان

بچه های بوکان

بچه های بوکان

پرسش ها، پاسخ ها و نکاتی در مورد SQL Server

پرسش :

وقتی من دستور select @@ version را از (SP1) SQL Server service pack اجرا می کنم شماره سریالی معادل 699 را ارائه می دهد، درحالیکه Query Analyzer help در sqlserver 7.0 عددی معادل 694 را بعنوان شماره سریال ارائه می دهد.

شماره سریال صحیح SQL server 7.0 (spl) چه می باشد؟

شماره سریال صحیح برای SQL server spl ، 699 می باشد بنابراین اجرای select @@ version از Query Analyzer یا (isql) interactive sql شماره سریال معادل 699 را برای SQL server 7.0 ارائه می دهد. در حالیکه شماره سریال ابزار سرویس گیرنده حتی بعد از بکارگیری (spl) 694 می‌باشد. این سیستم عدددهی گیج کننده است و ما امیدواریم که مایکروسافت جهت رفع هرگونه شبهه ای این اعداد را در نسخه های بعدی خود یکی کند.

پرسش :

با توجه به مطالب کتابهای راهنمای (Bol) sql server 7.0 می توانید از مطابقت پایگاه داده بنام consistency و از دستور (DBREINEX) برای ایجاد دوباره یک شاخص برروی یک جدول استفاده کنید. لذا وقتی که Dbcc show Config پراکندگی بالایی را گزارش داد سعی کردیم با استفاده از DBCC DBREINEX ، پراکندگی جداول را کاهش دهیم. در حالیکه اجرای این دستور در بهبود پراکندگی ها مؤثر واقع نشد. نظر شما در این مورد چیست ؟
ادامه مطلب ...

چگونه تاریخ میلادی را به تاریخ شمسی تبدیل کنیم؟

چگونه تاریخ میلادی را به تاریخ شمسی تبدیل کنیم تو #C؟


همانطور که می دانید تقویم به کار رفته در سیستم عامل ویندوز میلادی است و اگر شما قصد داشته باشید از تاریخ سیستم جهت نمایش تاریخ شمسی استفاده کنید مجبورید که آنرا به تاریخ شمسی تبدیل کنید. برای این کار راههای مختلفی وجود دارد که در زیر به دو روش آن اشاره شده است:


1- با استفاده از PersianCalendar خود سی شارپ(توصیه نمی شود زیرا نسبت به روش دوم دقیقتر است.)


2- با استفاده از دو کلاسی که به صورت DLL در آمده است با نام های Persia.dll و Jalalicalender.dll. در این روش شما باید ابتدا این دو dll را به References پروژه خود اضافه کنید. بعد از این کار شما به کلیه توابع موجود در ساختمان PersianDate دسترسی خواهید داشت. یکی از این توابع در زیر مثال زده شده است:


در رویداد کلیک یک کلید با استفاده از کد زیر تاریخ سیستم را به تاریخ شمسی تبدیل می شود و در یک TextBox به نمایش در می آید:


private void btndata_Click( sender, EventArgs e)


{


textBox1.Text = PersianDate.Now.ToLongDateString();


}


با بررسی سایر توابع موجود در این دو dll می توانید به امکانات بیشتری جهت تغییر تاریخ و زمان دست یابید.


نمونه برنامه

فرمول تبدیل تاریخ میلادی به شمسی و بر عکس

رای تبدیل تاریخ شمسی به میلادی و برعکس باید تعداد روزهای سپری شده از ابتدای هر کدام از این تاریخ‌ها را از مبدا خود به دست بیاوریم. اگر می‌خواهیم تاریخ شمسی را به میلادی تبدیل کنیم ابتدا باید روزهای سپری شده از مبدا تاریخ شمسی تا کنون را حساب کنیم و آن را به اضافه‌‌ی 226899 بکنیم. عدد به دست آمده تعداد روزهای گذشته از ابتدای تاریخ میلادی تا کنون است و با استفاده از آن می‌توانیم تاریخ میلادی را حساب کنیم. برای تبدیل تاریخ میلادی به شمسی همین کار را باید برعکس انجام بدهیم و عدد 226899 را باید از تعداد روزهای تاریخ میلادی کم بکنیم و در این قسمت عدد به دست آمده تاریخ شمسی است.
همین روش نیز برای تبدیل تاریخ قمری به شمسی و برعکس نیز قابل استفاده است. ولی در این مورد دیگر عددی که باید اضافه یا کم بشود 226899 نیست.
شاید از خود بپرسید که عدد 226899 را از کجا به دست آورده‌‌ام. برای به دست آوردن این عدد باید تاریخ شمسی و میلادی یک روز را در اختیار داشته باشید. به عنوان مثال 13/4/1383 شمسی طبق تقویم برابر 3/7/2004 میلادی است. کاری که باید الا بکنیم این است که این دو تاریخ را به روز تبدیل کنیم و در این تبدیل باید تعداد سال‌های کبیسه‌ای که این دو تاریخ پشت سر گذاشته‌اند نیز فراموش نکنیم. برای اینکه تعداد سال‌های کبیسه را در دو تقویم میلادی و شمسی بخواهیم محاسبه کنیم باید 1382 را برای تقویم شمسی و 2003 را برای تقویم میلادی تقسیم بر 4 کنیم. خارخ قسمت این دو تقسیم به ترتیب تعداد سال‌های کبیسه‌ی تقویم شمسی و میلادی است که از ابتدای شروع به کار این تقویم‌ها تا کنون پشت سر گذاشته‌اند. البته این اعداد مطابق واقعیت نیستند! ولی به محاسبات ما اشکالی وارد نمی‌کنند.
در تقسیم 1382 بر 4 خارج قسمت برابر 345 می‌شود و این عدد برای تقویم میلادی برابر 500 است.
خب پس تا کنون بر اساس تقویم شمسی 345 سال کبیسه بوده و بر اساس تقویم میلادی 500 سال برابر سال کبیسه بوده‌اند. (البته همان طور که دید به کبیسه بودن سالی که در آن هستیم هنوز توجهی نکردیم.)
خب برگردیم به مساله‌ی خودمان که می‌خواستیم دو تاریخ 13/4/1383 و 3/7/2004 به روز تبدیل کنیم.
برای این کار باید از عدد سال یکی کم کرده و در 365 ضرب کنیم. و از عدد ماه نیز باید یکی کم کرده و بر اساس نوع تقویم باید عدد ماه را ضرب در عدد خاصی بکنیم. مثلا وقتی در تاریخ شمسی از عدد ماه یکی کم کنیم حاصل 3 می‌شود. همان طور که می‌دانید در تقویم شمسی 3 ماه اول سال 31 روز دارند، پس 3 را در 31 ضرب می‌کنیم. ولی در تاریخ شمسی وقتی از 7 یکی کم کینم برابر 6 می‌شود. خب باید در این مورد ببینیم که 6 ماه اول سال میلادی چند روزه هستند.
ماه اول میلادی = 31 روز
ماه دوم میلادی = 28 روز (در سال کبیسه 29 روز)
ماه سوم میلادی = 31 روز
ماه چهارم میلادی = 30 روز
ماه پنجم میلادی = 31 روز
ماه ششم میلادی = 30 روز
ماه هفتم میلادی = 31 روز
ماه هشتم میلادی = 31 روز
ماه نهم میلادی = 30 روز
ماه دهم میلادی = 31 روز
ماه یازدهم میلادی = 30 روز
ماه داوزدهم میلادی = 31 روز
طبق جدول بالا 6 ماه اول سال 2004 میلادی برابر 182 روز می‌باشد. (فراموش نکنید که سال 2004 سال کبیسه است.) خب تا حالا عدد سال و ماه را به روز تبدیل کردیم و این دو عدد را باید به اضافه‌ی عدد روز کنیم و در آخر به اضافه‌ی تعداد سال‌های کبیسه گذشته بکنیم. داریم
A = (1382*365)+(3*31)+13+345 = 504881
B= (2003*365)+(31+29+31+30+31+30)+3+500=731780
B-A = 226899
با محاسبات فوق خواستم نشان بدهم که عدد 226899 که در اول بحث گفتیم را از کجا آوردیم. همان طور که احتمالا تا حالا فهمیدید این عدد (226899) تفاوت مبداهای دو تقویم میلادی و شمسی به روز هستند.
حال مثالی می‌زنم برای تبدیل تاریخ شمسی به تاریخ میلادی. فرض کنید که می‌خواهیم که تاریخ 15/4/1383 شمسی را به تاریخ میلادی نظیر آن تبدیل کنیم. در ابتدا باید این تاریخ را به روز تبدیل کنیم. طبق روش گفته شده در بالا می‌نویسیم:
C =[(1383-1)*365]+[(4-1)*31]+15+345 = 504883
خب این عدد را باید به اضافه‌ی 226899 بکنیم:
504883+226899 = 731782
حال باید 731782 را به تاریخ میلادی متناظر آن تبدیل کنیم.
ابتدا باید تعدا سال‌های کبیسه‌ی تقویم میلادی را از این عدد کنیم، در بالا دیدیم که تقویم میلادی تا کنون 500 سال کبیسه را پشت سر گذاشته است.
731782-500=731282
حال 731282 را بر 365 تقسیم می‌کنیم و خارج قسمت آن را به اضافه‌ی یک می‌کنیم و عدد به دست آمده عدد سال است :
731282 / 365 = 2003
2003 + 1= 2004
باقیمانده‌ی تقسیم فوق برابر 187 می‌باشد. حال با استفاده از جدول تعداد روز‌های تقویم میلادی شروع می‌کنیم از 187 کم می‌کنیم و باز هم فراموش نمی‌کنیم که سال 2004 میلادی سال کبیسه است :
187-31=156
156-29=127
127-31=96
96-30=66
66-31=35
35-30=5
خب تفریق‌های فوق را تا جایی ادامه می‌دهیم که عدد به دست آمده کمتر از تعداد روزهای یک ماه باشند. در بالا 6 مرحله تفریق انجام دهیم به عدد 6 باید یک بیافزاییم تا تعداد ماه‌ها به دست آید. و عدد ظاهر شده در تفریق آخر نیز برابر عدد روز می‌باشد. پس با محاسبات فوق دیدیم که تاریخ 15/4/1383 شمسی برابر 5/7/2004 است.
این روش کلی تبدیل دو تاریخ به یکدیگر است. و برای تبدیل انواع تقویم به هم باید این مراحل را انجام داد ولی با توجه به نوع تقویم‌ها عددهایی که باید اضافه یا کم بشود طبعا فرق می‌کند.
موفق باشید