با SQL Server 2005 بيشتر آشنا شويد

در اين بخش مي‌توانيد در مباحث مربوط به زبان هاي برنامه نويسي تحت دات نت به بحث بپردازيد

مدیران انجمن: athlon64x2, abbas.m.k, شوراي نظارت

ارسال پست
Administrator
Administrator
نمایه کاربر
پست: 15727
تاریخ عضویت: جمعه 7 بهمن 1384, 7:51 pm
سپاس‌های ارسالی: 71254 بار
سپاس‌های دریافتی: 31369 بار
تماس:

با SQL Server 2005 بيشتر آشنا شويد

پست توسط Mahdi1944 » جمعه 12 اسفند 1384, 4:23 am

منبع: مجله شبكه
شماره:53

Snapshot lsolation level
يكي از روش هايي كه به انواع متدهاي قفل كردن رديف هاي يك جدول بانك اطلاعاتي در نسخه جديد اضافه شده است شيوه تصوير برداري از ركورد است. در روش هاي قبلي،اگر يك يا چند ركورد بانك اطلاعاتي توسط دستور Begitn Trans كه شروع يك فرآيند را مشخص مي كند در شرف تغيير يا حذف قرار مي گرفتند،تا مادامي كه فرآيند مذكور توسط دستور Commit Trans تاييد يا توسط ROLLBack منتفي نشود،از هيچ جا و برنامه اي نمي توان ركوردهاي مذكور را حتي با دستور ساده SELECT خواند. اما در روش جديد قفل گذاري در صورت بروز چنين رويدادي ساير كاربران مي توانند همواره آخرين ارزش ركوردهاي مذكور را با اين فرض كه هنوز هيچ تغييري در آن ها ايجاد نشده است بخوانند و مورد استفاده قرار دهند.

باز هم دات نت
با نسخه جديد SQL Server ،برنامه نويسان بانك هاي اطلاعاتي قادرند از امكانات و قابليت هاي موجود در پلتفرم دات نت و كليه توابع و كلاس هاي ساخته شده در آن بهره مند شوند. يكي از ابتدايي ترين و در عين حال اساسي ترين اين قابليت ها،امكان استفاده از دو زبان مهم و كاربر پسند دات نت يعني ويژوال بيسيك و سي شارپ در پياده سازي اجزاي مختلف يك بانك اطلاعاتي است. اين عامل نه تنها باعث مي شود كه برنامه نويسان براي نوشتن ماژول هايي مثل تريگرها،روال ها(Stored procedures ) در توابع به جاي استفاده از زبان استاندارد و در عين حال پيچيده T-SQL ،بتوانند از زبان هاي محيط دات نت با تمام ساختارها،دستورات،كلاس ها،آرايه ها،و خلاصه تمام ويژگي هاي يك زبان شي گرا استفاده كنند،بلكه اين همكاري نزديك بين موتور برنامه نويسي دات نت يعني CLR (مسئول تبديل كدهاي نوشته شده دات نت به زبان سيستم عامل است) و موتور بانك اطلاعاتي SQL Server باعث شده تا به غير از تنوع زبان هاي برنامه نويسي قابل استفاده در SQL Server ،تغيير قابل توجهي نيز در كارآيي ماژول هاي مذكور پيش آيد. در واقع موضوع از اين قرار است كه اصولا” كدهاي نوشته شده به زبان هاي دات نت، ابتدا توسط كامپايلر به زبان (IL ) ترجمه مي شوند. سپس CLR اين كد مياني را به كد قابل فهم سيستم عامل تبديل و آماده اجرا مي نمايد. اين كار سبب مي شود تا كدهاي نهايي به دليل اين بسيار به سيستم عامل نزديك مي باشد سريع تر از كدهاي TSQL (كه فقط توسط موتور بانك اطلاعاتي قابل اجرا هستند )اجرا شوند و در زمان اجرا از كارايي بيشتري برخوردار باشند. البته اين مساله بدين معني نيست كه استفاده از زبان هاي دات نت هميشه بر زبان هاي SQL ارجحيت دارد،بلكه منظور آن است كه در برخي موارد ممكن است آن قدر منطق و الگوريتم يك ماژول پيچيده باشد كه برنامه نويس استفاده از زبان هاي دات نت را به دليل آسان تر بودن ساختار و دستورات آن به زبان SQL ترجيح دهد. بنابراين زماني كه بيشتر عمليات يك ماژول مربوط به خواندن و نوشتن اطلاعات باشد بهتر است از همان دستورات استاندارد SQL يعني DELETE,UPDATE,SELECR و INSERT استفاده كرده و بي جهت منابع سيستم را صرف تعريف متغيرها و كلاس هاي دات نت ننمايد. اما در ماژول هايي كه بيشتر عملياتشان شامل پردازش اطلاعات مثل انجام عمليات هاي رياضي يا مقا يسه اطلاعات با يكديگر است بهتر است تا هم از امكانات برنامه نويسي و هم از سرعت و كارايي بالاي دات نت در اين زمينه بهره برد و ماژول هاي مذكور را با زبان هاي دات نت پياده سازي كرد.

ADO.NET وارد مي شود
طبق يك سنت نه چندان قديمي برنامه نويسي در محيط ويندوز،برنامه نويسان SQL Server بانك اطلاعاتي مورد نظرشان را بروي سرور و برنامه كاربردي نوشته شده با زباني مثل ويژوال بيسيك را بر روي كلاينت ها قرار مي دهند. سپس از طريق اين برنامه كاربردي و با استفاده ا زاشياي از جنس ADO داده هاي مورد نياز خود را از سمت سرور دريافت كرده و يا به آن ارسال مي كنند. اكنون اين ارتباط به لطف نسخه جديد SQL Server و همچنين محيط دات نت با امكانات جديد ADO.NET بسيار كامل تر از قبل شده است. اين ارتباط جديد با استفاده از مكانيسمي به نام اعلان (Notification ) به يك ارتباط دو طرفه فعال تبديل شده به طوري كه ADD.NET قادر است پيغام هايي را از سمت پايگاه داده به سمت كلاينت ارسال كند. به عنوان مثال فرض كنيد كه شما با استفاده از ADO تعدادي از ركوردهاي يك جدول بانك اطلاعاتي را انتخاب كرده و مشغول كار بر روي آن ها هستيد. در همين هنگام كاربر ديگري از طريق كلاينت و ADO خود،ركوردي در محدوده ركوردهاي مورد انتخاب شما را تغيير مي دهد يا حذف مي كند. در اين وقت موتور پايگاه داده با ارسال پيغامي به ADO شما،اين مساله را با استفاده از فراخواني يك رخداد (Event ) شي ADO به اطلاعاتي مي رساند. علاوه بر اين قابليت جديد،فناوري جديد ديگري هم با استفاده از ADO.NET به نسخه جديد SQL.Server اضافه شده و آن امكان چند پرس و جوي همزمان توسط يك شي ADO است. در اين شيوه اگر يك شي ADO با استفاده از دستور SELECT مشغول خواندن تعدادي از ركوردهاي يك جدول بانك اطلاعاتي باشد،مي تواند بدون اين كه منتظر به پايان رسيدن اين عمليات شود،تعداد ديگري از ركوردهاي يك جدول ديگر بانك اطلاعاتي را بخواند. اين قابليت جديد با نام (MARS ) Multiple Active Result Set كه قبلا” در كرسرهاي سمت سرور (Server side ) و آن هم نه با كارايي بالا وجود داشت اكنون در كرسرهاي سمت راست كلاينت هم وجود دارد و تفاوت عمده آن با شكل قديمي هم علاوه بر مورد مذكور امكان ايجاد چند كرسر در يك شي ADO به صورت همزمان است SQL.Server . نسخه 2005 به خوبي از تمام اين ويژگي ها،پشتيباني مي كند.

تكنولوژي XML
اكنون كه XML به يك استاندارد ارتباطي بين سكوهاي مختلف تبديل شده است،نسخه جديد SQL Server هم از توجه كافي به آن و ايجاد يك انقلاب در ساده تر استفاده كردن از آن طفره نرفته است. در نسخه 2000 كاربران قادر بودند تا با استفاده از دستور FOR XML نتيجه يك پرس و جوي SELECT از يك بانك اطلاعاتي را به درون يك فايل XML را باز كرده و شروع به خواندن دستورات آن نمايند. از آن جا كه در نسخه جديد SQL Server توجه خاصي بهاين استاندارد و زبان ارتباطي شده است.يك نوع داده جديد (Date type ) به انواع داده هاي قبلي و استاندارد SQL مثل Char,int و امثال آن اضافه شده است. اين نوع داده جديد كه XML نام دارد و داراي خصوصيات يك نوع داده موجود در يك محيط شي گرا است،داراي متدهاي پيشرفته اي چون () guery ،() exist ،() value ،()nodes ،() modify بوده و قادر است انواع پردازش هاي قابل انجام بر روي اسناد XML را به راحتي انجام دهد. عمليات جستجو ،تغيير، حذف و درج مقادير مورد نظر در داخل يك فايل XML را مي توان با استفاده از متدهاي مذكور و صرفا” با چند خط برنامه نويسي انجام داد. همچنين در اين نسخه برخلاف نسخه 2000 ،با استفاده از دستور FOR XML مي توان يك شي از جنس XML را بدون ارسال آن به كلاينت،بر روي سرور ساخته و از آن نگهداري كرد. با اين كار مي توان جداولي را كه مرتبا” مورد رجوع كاربران قرار مي گيرند هر از گاهي در قالب XML به داخل حافظه آورد و كاربران مذكور به جاي رجوع به جداول اصلي در هارد ديسك،با استفاده از دستورات ويژه جستجو در XML ،متغير مذكور را در حافظه سرور مورد جستجو قرار دهند و بدين وسيله يك نوع عمل Cache كردن را جهت افزايش سرعت دسترسي به اطلاعات تكراري شبيه سازي كنند. در اين حالت،كاربران به جاي استفاده از دستور SELECT استاندارد مي توانند از OPEN XML كه در نسخه 2005 قادر است متغيرهاي جديد از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات مورد نياز خود دسترسي پيدا كنند. اين قابليت جديد آن قدر در سريع تر كردن جستجو در برنامه هاي تحت وب مهم و موثر است كه جاي هيچ مشكلي را در استفاده از آن باقي نمي گذارد.

سرويس اعلان (Notification )
همان طور كه گفتيم سيستم اعلان در SQL Server قادر است پيغام هايي را طي زمان هاي مشخص به سمت كاربران بفرستد. مثلا” تصور كنيد كه تعدادي كاربر در حال اتصال به يك بانك حاوي اطلاعات مربوط به ارزش سهام در بورس هستند. از آن جايي كه ممكن است قيمت سهام هر شركت يا موسسه براي تعدادي از كاربران از اهميت زيادي برخوردار باشد،مي توان اين سيستم را طوري تنظيم كرد تا هر گاه ارزش سهام خاصي ك مورد نظر هر كاربر است تغيير كرد،به صورت اتوماتيك به وي اعلام شود. كاربر هم مي تواند اين تغييرات را بر روي برنامه كاربردي خود،تلفن همراه(ئر قالب SMS )،Windows Messenger و يا ايميل به صورت مرتب دريافت و مشاهده كند.

سرويس گزارش گيري
سرويس جديد توليد گزارش هاي متنوع در نسخه 2005 به يكي از جالب ترين و پركاربرد ترين قابليت هاي اين نسخه تبديل شده است،وجود يك موتور گزارشگر قوي در سمت سرور و يك ابزار مناسب ساخت گزارش با واسط كاربر عالي،باعث شده تا برنامه نويسان بتوانند گزارش هاي مورد نظر خود را با كارايي و سرعت مناسب در سمت سرور بسازند به طوري كه اين گزارش هاي سمت سرور توسط هر برنامه كاربردي سمت كلانيت در هر پلتفرمي با همان امكانات اتصال به SQL Server قابل مشاهده است.

بهبودهاي ايجاد شده در زبان
در SQL Server 2005 تغييرات بسيار مثبتي در زبان SQL T ايجاد شده است. اين تغييرات در زمينه هاي مختلف مثل مديريت خطاها،جستجوهاي بازگشتي (Recursive Query ) و حتي در بدنه موتور پايگاه داده ها انجام شده و كارايي كلي ذخيره و يا خواندن اطلاعات را به نحو مطلوبي افزايش داده است. به عنوان مثال در دستورات TSQL ،دو اپراتور جديد ديده مي شود كه PIVOT و UNPIVOT نام دارند. اين دو اپراتور كه در قسمت FROM يك پرس وجو مورد استفاده قرار مي گيرند مي توانند نتيجه يك جستجوي انجام شده توسط دستور SELECT را به جاي برگرداندن در قالب رديف ها يا ركوردهاي پشت سر هم،به صورت ستون هاي مختلف يك يا چند ركورد برگردانند. در اين روش يكي از ستون هاي فيلدهاي يك جستجو به عنوان محور معرفي شده و بقيه ستون ها بر اساس آن به صورت افقي طبقه بندي مي شوند. به يك مثال توجه كنيد:
SELECT CUSTOMER ID, Order NO FROM Orders PIVOT Customer ID

Order NO Order NO Order NO Order NO Customer ID
4400 1120 25 1
350 2
1780 443 3
8989 2222 1980 555 4
نتيجه جستجوي فوق چيزي شبيه جدول بالا خواهد بود.
همان طور كه مشاهده مي كنيد با استفاده از اپراتور مذكور،نتيجه پرس و جوي انجام شده به اين صورت كه هررديف به يك شماره مشتري و جندين شماره سفارش مربوطه به آن مشتري در قالب ستون هاي مختلف است. در مي آيد. اين همان چيزي است كه سالها SQLServer آن را با نام Cross Tab به كاربران خود ارايه مي دادند. در همين رابطه اپراتور UNPIVOT هم عمل عكس اپراتور مذكور را انجام مي دهد. اپراتور ديگري كه مي تواند نقش مهمي را در دستورات SQL بازي كند APPLY نام دارد كه در قسمت FROM يك دستور SQL به كار مي رود. با استفاده از اين دستور مي توان خروجي يك تابع را با يك يا چند جدول ديگر تركيب كرد همان طور كه مي دانيد در SQL Server توابع مي توانند يك يا چند رديف جدول اطلاعاتي را برگردانند كه اين خروجي مي توانند با يك جدول ديگر با استفاده از اپراتور مذكور تركيب شود.

مديريت خطا
در نسخه هاي قديمي SQL Server براي كشف و مديريت خطا از سيستم Error Handing استفاده مي شد. اين شيوه كشف خطا كه در زباني مثل ويژوال بيسيك 6 مورد هم استفاده قرار مي گرفت با استفاده از دستور GOTO مي توانست كنترل و خط اجراي روال را از يك محل به محل ديگر و در واقع از محل بروز خطا به محل مديريت و آشكار كردن آن ببرد و بدين وسيله پيغام خطايي را به كار نشان دهد. نسخه جديد SQL Server با تاثير از پلتفرم دات نت،از دستورات ويژه كشف و مديريت خطا با عنوان Exception Handling استفاده مي كند،اين روش با استفاده از دستورات جديد TRY\CATCH شيوه بهتري از مديريت خطا را به اجرا مي گذارد. در اين روش برخلاف روش قبل،تمام خطاهاي اتفاق افتادني مثل خطاهاي مربوط به تبديل داده ها به يكديگر Data Conversion به خوبي مديريت شده و از بروز خطاهايي كه منجر به اتمام ناقص عمليات يك روال يا تريگر مي شود جلوكيري به عمل مي آيد.
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | مجله الکترونيکي سنترال کلابز

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد

Novice Poster
Novice Poster
پست: 81
تاریخ عضویت: دو شنبه 13 شهریور 1385, 2:48 pm
سپاس‌های ارسالی: 445 بار
سپاس‌های دریافتی: 39 بار

پست توسط mikaeil » پنج شنبه 10 اسفند 1385, 9:52 pm

سلام
من يک مشکل با sqlserver 2005 داشتم که گفتم ارزش يک تايپ جدا را شايد نداشته باشه :-)
راستش من کارورزي رفتم يک شرکتي و براي اونها دارم يک برنامه اي مي نويسم که بانک اطلاعاتي اون را با sql ساختم و برنامه اون را با C#.net شايد خنده دار باشه :grin: امروز که بعد از کلي درس خوندن و پروژه دادن به استادها براي اولين بار اومدم فارسي بنويسم که ديدم توي ديتابيس بصورت علامت سوال وارد ميشه :grin:
اينم بگم که موقع نصب فارسي را انتخاب کردم که زبان سرور باشه اما دقيقا يادم نيست کجا ولي نوشته بود Farsi (Iran) :grin:
ممنون ميشم کمک کنيد :razz: :)
>هر دم چو تاک بار درختي نمي کنيم // چون سرو بسته ايم به دل بار خويش را
>>>> عشق من ايران اسلامي <<<<

Administrator
Administrator
نمایه کاربر
پست: 15727
تاریخ عضویت: جمعه 7 بهمن 1384, 7:51 pm
سپاس‌های ارسالی: 71254 بار
سپاس‌های دریافتی: 31369 بار
تماس:

پست توسط Mahdi1944 » جمعه 11 اسفند 1385, 12:06 am

mikaeil جان
فيلدهاي ديتابيس رو يونيکئ کرديد؟ فارسي رو براي ويندوز فعال کرديد؟
در ضمن براي فارسي فونت tahoma رو انتخاب کنيد
اگر مشکل رفع نشد اعلام کنيد تا روشهاي ديگه‌اي رو بررسي کنيم :-(
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | مجله الکترونيکي سنترال کلابز

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد

Novice Poster
Novice Poster
پست: 81
تاریخ عضویت: دو شنبه 13 شهریور 1385, 2:48 pm
سپاس‌های ارسالی: 445 بار
سپاس‌های دریافتی: 39 بار

پست توسط mikaeil » جمعه 11 اسفند 1385, 11:39 am

Mahdi1944, عزيز
فيلد ها را بايد چطوري يونيکد کنم توي column Properties که چيزي ننوشته / فونت برنامه هم tahoma هست :-) / فارسي ويندوز هم نصبه :-)
>هر دم چو تاک بار درختي نمي کنيم // چون سرو بسته ايم به دل بار خويش را
>>>> عشق من ايران اسلامي <<<<

Administrator
Administrator
نمایه کاربر
پست: 15727
تاریخ عضویت: جمعه 7 بهمن 1384, 7:51 pm
سپاس‌های ارسالی: 71254 بار
سپاس‌های دریافتی: 31369 بار
تماس:

پست توسط Mahdi1944 » جمعه 11 اسفند 1385, 12:37 pm

mikaeil جان
با باز کردن فايل ديتابيس در اديتورهايي مثل EmEditor مي‌تونيد فيلدها رو به صورت دستي به UTF-8 تبديل کرده و اون رو با همون اينکودينگ UTF-8 ذخيره کنيد
براي رفع مشکل ورود اطلاعات به صورت ؟؟؟؟؟ هم بايد از يك N قبل از عبارت insert و يا آپديت استفاده كنيد. نوع فيلدها هم بايد با n شروع شود مانند ntext و ....( n به معناي national)
اين موارد رو اجرا کنيد و نتيجه رو اعلام کنيد :D
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | مجله الکترونيکي سنترال کلابز

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد

Novice Poster
Novice Poster
پست: 81
تاریخ عضویت: دو شنبه 13 شهریور 1385, 2:48 pm
سپاس‌های ارسالی: 445 بار
سپاس‌های دریافتی: 39 بار

پست توسط mikaeil » جمعه 11 اسفند 1385, 1:41 pm

مشکلم حل شد :-)
بايد نوعش را nvarchar و قبل از هر ورودي حرف N را قرار بدم مثل N'هرچي'

ممنون از توجهتون :razz:
>هر دم چو تاک بار درختي نمي کنيم // چون سرو بسته ايم به دل بار خويش را
>>>> عشق من ايران اسلامي <<<<

ارسال پست

بازگشت به “Dot Net Programming”