معرفی ADO و کاربرد آن در ASP
ارتباط ASP با بانک های اطلاعاتی از طریق واسطی بنام ADO انجام می گیرد. با استفاده از رابط فوق می توان به انواع داده های ذخیره شده بسادگی، در کمترین زمان و صرفا بکمک یک مسیر دستیابی پیدا کرد. به همین دلیل می توان ادعا کرد که ADO ساده ترین روشی است که تاکنون برای ذخیره و بازیابی داده ها بوجود آمده است.ADO نسخه 5 / 2 دارای پنج شئ اساسی با نام : Connection , Command, RecordSet , Record , Stream است. دو شی Record و Stream در نسخه قبلی ADO وجود نداشتند. در این مقاله به بررسی برخی از اشیاء عمده ADO و متدهای مربوطه آنها خواهیم پرداخت.
شئ Connection
قبل از هر گونه ذخیره و بازیابی داده ها از بانک اطلاعاتی می بایست با ایجاد و مقدار دهی اولیه یک Connection زمینه لازم جهت ارتباط با بانک اطلاعاتی را بوجود آورد. در ADO با استفاده از شی Connection یک ارتباط با بانک اطلاعاتی ایجاد و پس از انجام عملیات دلخواه در رابطه با بانک اطلاعاتی و در زمانیکه به وجود آن دیگر نیاز نباشد، می توان آن را حذف کرد. Open کردن یک ارتباط به بانک اطلاعاتی پروژه ای واحد با نام ( ADODB(ActiveX Data Objects Database بوده که خود شامل تمامی اشیاء ADO است. برای ایجاد یک Connection نظیر سایر اشیاء ASP از متد Server.CreateObject استفاده می گردد.
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
بصورت پیش فرض Connection فقط خواندنی می باشند، شما می توانید وضعیت فوق را تغییر داده و در صورت نیاز و بکمک صفات مربوط به شی فوق ارتباطاتی از نوع خواندنی / نوشتنی و یا فقط نوشتنی ایجاد نمائید. در زمان استفاده از ADO می توان از مجموعه ای ثوابت که دربردارنده مقادیر متفاوتی برای آیتم های متفاوت می باشند و پیشاپیش تعریف شده اند استفاده کرد. این ثوابت در فایلی با نام Adovbs.inc قرار دارند. بمنظور استفاده از ثوابت فوق در صفحات ASP خود، می بایست فایل فوق را بکمک دستور Include به برنامه های خود ملحق نمائیم.
اگر فایل adovbs.inc را توسط ادیتوری نظیر Notepad فعال نمائید، ثوابت تعریف شده را بصورت مجموعه ای از گروهها مشاهده خواهید کرد. پس از ایجاد یک Connection با بانک اطلاعاتی می توان نوع ( Mode ) ارتباط را بکمک استفاده از ثوابت تعریف شده مشخص نمود. در صورتیکه بخواهیم از بانک اطلاعاتی صرفا اطلاعاتی را بخوانیم از ثابت adModeRead ، فقط اطلاعاتی را در بانک اطلاعاتی بنویسیم از ثابت adoModeWrite و در نهایت در صورتیکه قصد داریم بطور همزمان اطلاعاتی را از بانک اطلاعاتی خوانده و در آن اطلاعات جدیدی را نیز بنویسیم از ثابت adoModeReadWrite استفاده می گردد. توصیه می گردد با توجه به نوع رفتاری که با بانک اطلاعاتی خواهیم داشت آن را باز نمائیم چراکه در صورتیکه صرفا قصد خواندن و یا نوشتن را در یک بانک اطلاعاتی داشته باشیم و نخواهیم دو عملیات را با هم انجام دهیم، باز کردن بانک اطلاعاتی بصورت هم خواندنی و هم نوشتنی ( adoModeReadWrite ) سرعت دستیابی به بانک اطلاعاتی را کاهش خواهد داد.
ConnectionString
پس از تعیین Mode، می بایست صفت Connectionstring مربوط به شی Connection را مقدار دهی مناسب نمود. صفت فوق دارای چندین بخش بوده که می بایست مشخص گردند: نام Provider، نام سرویس دهنده بانک اطلاعاتی، نام بانک اطلاعاتی که قصد استفاده از آن را دارید، User Id لازم جهت اتصال به بانک اطلاعاتی (UID)، رمز عبور برای کاربرخاص ( PWD ).
هر یک از بخش های فوق توسط علامت ";" از هم جدا می شوند. مثلا در ساده ترین حالت می توانید از یک Data Source Name یا DSN یا مربوط به ODBC، یک User ID، و یک رمز عبور جهت اتصال به بانک اطلاعاتی استفاده نمائید. یک DSN خود شامل نام Provider، نام سرویس دهنده بانک اطلاعاتی و نام بانک اطلاعاتی بوده و دیگر نیازی به مشخص نمودن مجدد آنها نخواهد بود. به مثال زیر توجه فرمائید.
Dim Conn
Set Conn = Server.Create0bject("ADODB.Connection")
Conn.Mode = adModeReadWrite
Conn.ConnectionString = "DSN=myDSN;UID=Javad;PWD=7474;"
روش فوق بهترین حالت ایجاد یک ارتباط نیست زیرا DSN بصورت پیش فرض از MSDASQL Provider استفاده می کند. اما JET OLEDB Provider بمراتب سریعتر و قابلیت های بیشتری را دارا است. بنابراین می توان جهت ارتباط با بانک اطلاعاتی مطابق زیر عمل نمود:
Dim Conn, ConnStr
ConnStr= "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath(Path2DB)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeReadWrite
Conn.ConnectionString = ConnStr
ConnectionString شامل نام Provider، نام سرویس دهنده بانک اطلاعاتی و نام بانک اطلاعاتی است. در مثال فوق از تابع Server.MapPath برای ترجمه مسیر مجازی به مسیر واقعی استفاده شده است. مثلا یک بانک اطلاعاتی موجود درwww.Test.com/test.mdb می تواند بصورت واقعی در مسیر E:\web\Mydatabase\Test.mdb قرار گرفته باشد. تابع Server.MapPath آدرس نوع اول را به آدرس نوع دوم ترجمه خواهد کرد. توجه داشته باشیم که شی ADODB.Connection نیازمند آگاهی از مسیر واقعی بانک اطلاعاتی است. فراموش نکنیم که قبل از باز نمودن Connection، تمامی تغییرات لازم بر روی صفت های مربوطه اعمال گردد. در صورتیکه بخواهیم پس از ایجاد ارتباط با بانک اطلاعاتی یک یا چند صفت مرتبط را تغییر دهیم، می بایست در ابتدا ارتباط خود را با بانک اطلا عاتی قطع (Connection، بسته گردد) و در ادامه تغییرات لازم را از طریق صفات مربوطه اعمال و مجددا Connection را برقرار نمود.
بمنظور باز نمودن یک Connection از متد Open مربوط به شئ Connection استفاده می گردد.
متد Connection.Open
در صورتیکه متد فوق بدون خطا اجرا گردد، یک ارتباط کاری ( عملیاتی) با بانک اطلاعاتی ایجاد شده است.
متد Connection.Execute
برای بازیابی داده ها از یک بانک اطلاعاتی توسط ADO سه روش عمده وجود دارد. تمامی آنها در مرحله اول نیاز به ارتباط با بانک اطلاعاتی خواهند داشت. ساده ترین حالت استفاده از متد Execute مربوط به شی Connection است. متد فوق سه پارامتر را خواهد داشت:- یک دستور SQL، یا Query، Table، View یا نام یک Stored Procedure که توسط پارامتر CommandText مشخص خواهد شد.
• یک متغیر با نام RecordsAffected، که شامل تعداد رکوردهائی خواهد بود که با توجه به Query اجرا شده توسط متد Execute مشخص می شود.
• یک ثابت اختیاری با نام CommandTypeEnum که به بانک اطلاعاتی خواهد گفت چه نوع عبارت و یا Query را می خواهید اجرا نمائید و اینکه یک شی Recordset را برگرداند یا خیر.
پس از اجرای متد Execute ( به هر روش ممکن )، رکوردهای برگردانده شده در شئ RecordSet برگردانده خواهند شد. در صورتیکه از دستور SELECT استفاده شود رکوردهای برگردانده شده در شی RecordSet قرار خواهند گرفت. اما زمانیکه از دستورات INSERT و یا UPDATE استفاده گردد رکوردی باز گردانده نخواهد شد.