• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

برنامه نويسي با Asp.net

p4ym4n

کاربر ويژه
ارتباط ASP با بانكهای اطلاعاتی

بررسی SQL و ADO و نحوه برقراری ارتباط بين آنها و ASP

--------------------------------------------------------------------------------
ازآنجا كه برقراری ارتباط با بانكهای اطلاعاتی يكی از مباحث مهم و پركاربرد در ASP است، در اين مقاله سعی شده است با معرفی SQL و ADO، نحوه برقراری ارتباط ASP با بانكهای اطلاعاتی بطور خلاصه شرح داده شود.

SQL يك زبان استاندارد ANSI برای دستيابی به يك بانك اطلاعاتی و همچنين پرس و جو از بانك اطلاعاتی است. زبان SQL با برنامه های بانك اطلاعاتی مانند: Access, Oracle, MS SQL Server, DB2, Informix & ... كار می كند. چون SQL زبان استاندارد بانكهای اطلاعاتی است برای دستيابی به بانكهای اطلاعاتی از اين زبان استفاده می شود.

دستورات زير برای پرس و جو از بانكهای اطلاعاتی در SQL بكار می رود:

Select : داده ها را از بانك اطلاعاتی فراخوانی ميكند.
Insert : داده ها را به بانك اطلاعاتی اضافه می كنند .
Update : داده ها را در بانك اطلاعاتی تغيير می دهند و به روز می كنند.
Delete : داده ها را از داخل بانك اطلاعاتی پاك می كنند.

در ASP برای ارتباط با بانك های اطلاعاتی از ADO استفاده می شود و ADO برای پرس و جو از بانك اطلاعاتی از زبان استاندارد SQL استفاده می كند. يعنی برای ارتباط با بانكهای اطلاعاتی از داخل صفحات ASP بايد هم SQL و هم ADO را فرا بگيريد زيرا از هر دوی آنها به طور مشترك در ASP استفاده می شود.

ADO يك زبان نيست بلكه يك تكنولوژی است كه توسط ميكروسافت برای دسترسی به بانكهای اطلاعاتی از داخل صفحات وب ساخته شده است كه به همراه IIS در ويندوز نصب می شود. برای برقراری ارتباط با بانك های اطلاعاتی بوسيله ADO دو راه وجود دارد.

۱- ارتباط DSN_LESS
اين نحوه ارتباط به اين صورت است كه بعد از ساختن يك شئ Connection و مشخص كردن درايور بانك اطلاعاتی، مسير فايل بانك اطلاعاتی را مشخص می كنيم و بدين صورت بانك اطلاعاتی را از داخل صفحه وب معرفی می كنيم. در مثال زير، يك بانك اطلاعاتی را از درايو C باز كرده ايم:

ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
%>
۲- ارتباط ODBC
نحوه برقراری ارتباط ODBC با يك بانك اطلاعاتی MS Access :
آيكون ODBC را از داخل پنجره ControlPanel انتخاب كنيد و روی قسمت DSN System كليك كنيد، دكمه ADD را برای ساختن يك ارتباط جديد كليك كنيد. سپس Microsoft Access Driver را انتخاب کزده و روی Finish كليك كنيد. در صفحه بعد روی دكمه Select كليك كنيد و مسير فايل بانك اطلاعاتی را مشخص نمائيد. سپس در فيلد Name نام بانك اطلاعاتی خود را وارد نماييد و OK را فشار دهيد.

تا اين مرحله شما يك ارتباط ODBC را برای يك بانك اطلاعاتی ساخته ايد حال برای فراخوانی اين بانك از داخل صفحه ASP كد زير را داخل صفحه ASP بنويسيد:

ADODB.Connection")
conn.Open "northwind"
%>
در روش اول برای برقراری ارتباط نياز به DSN System در ODBC نداريم و تمام اعمال مربوط به ارتباط در داخل صفحه ASP انجام می شود لذا اين روش هنگامی مفيد است كه ميزبان شما يك سرور خارجی باشد و يا اينكه شما به ميزبان سايت خود دسترسی فيزيكی نداشته باشيد. اما اگر به سرور ميزبان سايت خود دسترسی داريد می توانيد از روش دوم استفاده كنيد. البته در اين حالت از روش اول هم می توانيد استفاده كنيد. اما پيشنهاد می شود كه در هر حالت شما از روش اول يعنی DSN_LESS استفاده كنيد زيرا در تمام حالات و وضعيت ها جواب می دهد و مشكلی پيش نخواهد آمد.
 

p4ym4n

کاربر ويژه
بررسی مجموعه ها، متدها و رويدادهای شئ Application در ASP كلاسيك

--------------------------------------------------------------------------------
اين مقاله بطور خلاصه به بررسی شئ Application ومتدها، مجموعه هاو رويدادهای آن می پردازد. همانطور كه ميدانيد اين شئ برای ذخيره كردن متغيرها و همچنين دستيابی به متغيرها از هر صفحه ASP استفاده می شود. اين شئ، يك شئ عمومی است و اطلاعاتی را كه می خواهيد در چند صفحه ASP مورد استفاده قرار دهيد، بايد در اين شئ ذخيره كنيد.

مجموعه Contents
اين مجموعه حاوی تمام آيتم های اضافه شده در يك اسكريپت واقع در يك برنامه ASP است. لازم به ذكر است كه برای حذف آيتم ها از اين مجموعه می توانيد از متدهای Remove و Removeall استفاده كنيد.
قاعده تركيبی : Application.Contents(Key)
پارامتر key نام آيتم بازيافت شده از اين مجموعه است.

date")="2001/05/05"
Application("author")="Ostadhashemi"
for each x in Application.Contents
Response.Write(x & "=" & Application.Contents(x) & "<br>")
next
%>
مجموعه StaticObjects
اين مجموعه محتوی تمام آيتم های اضافه شده در يك برنامه ASP است كه بوسيله دستور <Object> اضافه شده اند.
قاعده تركيبی : Application.StaticObjects(Key)
پارامتر key نام آيتم بازيافت شده از اين مجموعه است.

server" scope="application" id="MsgBoard" progid="msgboard.MsgBoard">
</object>
<object runat="server" scope="application" id="AdRot" progid="MSWC.AdRotator">
</object>

In an ASP file :
<%
for each x in Application.StaticObjects
Response.Write(x & "<br>")
next
%>
متد Remove
وظيفه اين متد حذف يك يا چند آيتم از مجموعه Contents است.
قاعده تركيبی : Application.Contents.Remove(name|index)
پارامترها :
name = نام آيتم موجود در مجموعه Contents
index = شماره آيتم موجود در فهرست مجموعه Contents

test1")=("First test")
Application("test2")=("Second test")
Application.Contents.Remove(2)
for each x in Application.Contents
Response.Write(x & "=" & Application.Contents(x) & "<br>")
next
%>
متد RemoveAll
اين متد تمام آيتم های موجود در مجموعه Contents را پاك می كند.
قاعده تركيبی : Application.Contents.RemoveAll()
اين متد، مستقل و بصورت زير در صفحات ASP استفاده می شود :
Application.Contents.RemoveAll()

متد Lock
اين متد مانع تغيير دادن متغيرهای شئ Application توسط كاربران می شود. همچنين مانع از دسترسی بيش از يك نفر در يك زمان به يك متغير Application می شود.

متد UnLock
اين متد، متد Lock را خنثی می كند و اجازه تغيير دادن متغيرهای Application را به بقيه كاربران می دهد.

visits")=Application("visits")+1
Application.Unlock
%>
This page has been visited
<%=Application("visits")%> times!
در مثال بالا از متد Lock برای جلوگيری از دسترسی بيش از يك كاربر به متغيرها استفاده شده است و متد UnLock كه در واقع پايان كار متد Lock است و در آخر كد آمده است به كاربر بعدی اجازه اضافه كردن يك واحد به متغير را می دهد.

رويداد Application_OnStart
قبل از اينكه اولين جلسه كاربری جديد تشكيل شود اين رويداد رخ می دهد (وقتی كه شئ Application اولين مراجعه را دارد ) توجه كنيد كه جای اين رويداد داخل فايل Global.asa است.
نكته: مراجعه به اشياء Request , Session و يا Response در اين رويداد باعث بروز خطا در اسكريپت می شود.

رويداد Application_OnEnd
اين رويداد هنگامی كه يك برنامه ASP بكار خود پايان می دهد و يا هنگامی كه سرور به حالت Stop می رود رخ می دهد. جای قرار دادن اين رويداد نيز داخل فايل Global.asa است.
نكته: متد MapPath از شئ Server نمی تواند در اين رويداد استفاده شود.

قاعده تركيبی دو رويداد فوق در فايل Global.asa :

vbscript" runat="server">
Sub Application_OnStart
. . .
End Sub
Sub Application_OnEnd
. . .
End Sub
</script>
 

p4ym4n

کاربر ويژه
نحوه بکارگيری فايل Global.asa و کاربردهای آن در يک برنامه ASP کلاسيک

--------------------------------------------------------------------------------
در فايل Global.asa، می توان اسكريپت هائی را تعريف نمود كه همزمان با بروز يك رويداد ( Event ) فعال شده و يا اقدام به تعريف اشياء Session و Application نمود. امكانات تعريف شده در فايل فوق برای تمامی صفحات تشكيل دهنده يك برنامه ASP قابل دستيابی و استفاده خواهند بود. ضرورت وجود فايل فوق اختياری بوده و در صورت تعريف می بايست در فهرست ريشه ای كه برنامه ASP در آن قرار دارد، استقرار يابد. هر برنامه ASP صرفا می تواند دارای يك فايل Global.asa باشد.

رويدادهای استاندارد در فايل Global.asa
در فايل فوق می توان به اشياء Application و Session گفت كه در زمان آغاز و خاتمه عمليات مربوط به خود چه كارهائی را انجام دهند. در مجموع در فايل فوق چهار نوع رويداد را می توان قرار داد :

• Application_OnStart: رويداد فوق زمانيكه اولين كاربر به اولين صفحه يك برنامه ASP دستيابی پيدا می كند، فعال می گردد.
• Session_OnStart: رويداد فوق هر دفعه كه يك كاربر جديد درخواست اولين صفحه يك برنامه ASP را داشته باشد، فعال می گردد.
• Session_OnEnd: رويداد فوق هر بار كه كاربری به جلسه كاری خود خاتمه می دهد فعال می گردد. در صورتيكه در يك مدت زمان مشخص و محدود ( پيش فرض بيست دقيقه ) در خواست صفحه ای توسط كاربر واصل نگردد، به جلسه كاری وی خاتمه داد می شود.
• Application_OnEnd: رويداد فوق پس از اينكه آخرين كاربر به كار خود خاتمه می دهد، فعال می گردد. معمولا رويداد فوق زمانيكه سرويس دهنده وب متوقف می گردد نيز فعال می گردد.

برای هر يك از رويدادهای فوق می توان روال هائی را نوشت كه مسئول برخورد با رويداد مربوطه باشند. اين روال ها درفايل Global.asa قرار می گيرند. چهارچوب كلی فايل فوق كه متضمن خواسته های چهارگانه فوق باشد می تواند بصورت زير باشد:

<script language="vbscript" runat="server">
sub Application_OnStart
. . .
end sub
sub Application_OnEnd
. . .
end sub
sub Session_OnStart
. . .
end sub
sub Session_OnEnd
. . .
end sub
</script>
با مشاهده چهارچوب فوق دوستان متوجه شده اند كه از <% و %> استفاده نشده و بمنظور استفاده از اسكريپت ها در فايل Global.asa می بايست از تگ <script> استفاده و روال های مربوطه را تعريف نمود.

در رابطه با فايل Global.asa محدوديت هائی وجود دارد كه ذيلا به آنها اشاره می شود:

• فايل فوق قادر به نمايش اطلاعات نمی باشد، بنابراين نمی توانيم بكمك آن متنی را نمايش دهيم.
• از دايركتيو Include# نمی توان در فايل فوق استفاده نمود.
• در روال های Application_OnStart و Application_OnEnd صرفا می توان از اشياء Server و Application استفاده كرد.
• در روال Session_OnEnd می توان از اشياء Server و Application و Session استفاده نمود.
• در روال Session_OnStart می توان از تمامی اشياء از پيش ساخته شده همراه ASP استفاده نمود.

نحوه استفاده از روال ها
از روال های موجود در يك فايل Global.asa می توان در جهت مقاصد مختلفی استفاده بعمل آورد. در ادامه به تشريح برخی از اين نوع اهداف خواهيم پرداخت.

• از فايل Global.asa اغلب برای مقداردهی اوليه متغيرها استفاده می شود. در مثال زير نحوه تشخيص زمان مربوط به ملاقات يك وب سايت توسط يك كاربر نشان داده شده است. زمان فوق در متغير started مربوط به شی Session ذخيره می گردد. مقدار متغير فوق توسط هر يك از صفحات موجود در يك برنامه ASP قابل دستيابی خواهد بود.

vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>
• از فايل Global.asa بمنظور كنترل دستيابی به صفحات نيز می توان استفاده كرد. در مثال زير پس از ارتباط كاربر با سايت، بصورت اتوماتيك وی بسمت استفاده از يك فايل ( MyNewPage.asp ) ديگر هدايت می گردد.

vbscript" runat="server">
sub Session_OnStart
Response.Redirect("MyNewPage.ASP")
end sub
</script>
در ادامه به بررسی يك مثال كاربردی از تاثير فايل فوق و نحوه استفاده از پتانسيل های ايجاد شده توسط فايل های ASP، خواهيم پرداخت.

مثال در اين مثال با استفاده از فايل Global.asa، تعداد ملاقات كنندگان فعال يك سايت را مشخص می نمائيم. در فايل فوق از سه روال استفاده خواهد شد كه هر يك عمليات محوله را انجام خواهند داد. روال Application_OnStart، متغير visitors مربوط به شی Application را صفر قرار می دهد. مقدار اوليه متغير فوق پس از اينكه سرويس دهنده كار را آغاز كرد، به آن داده خواهد شد. روال Application_OnStart زمانيكه يك ملاقات كننده جديد وارد سايت می گردد، يك واحد به متغير visitors اضافه كرده و در نهايت روال Session_OnEnd زمانيكه يك ملاقات كننده سايت را ترك می كند، يك واحد از متغير visitors كم می كند.

محتويات فايل Global.asa:

<script language="vbscript" runat="server">
Sub Application_OnStart
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub
</script>
بمنظور نمايش تعداد ملاقات كنندگان فعال، می توان از يك فايل ASP مطابق زير استفاده نمود.

<html>
<head></head>
<body>
<p>You are one of the <%=Application("visitors")%> online user!</p>
</body>
</html>
 

p4ym4n

کاربر ويژه
راهكارهائی برای بهبود طراحی صفحات ASP – بخش دوم

در بخش اول اين مقاله نحوه استفاده از فايل های ضميمه بعنوان اولين رويكرد جهت طراحی صفحات ASP ماژولار، تشريح گرديد. در اين مقاله به بررسی امكانات Server.Execute و Server.Transfer بعنوان دومين رويكرد جهت طراحی صفحات ماژولار خواهيم پرداخت.

Server.Execute
از امكان فوق جهت طراحی صفحات ماژولار ASP می توان استفاده كرد. در صورت استفاده از امكان فوق در يك صفحه، كنترل به صفحه ديگر منتقلشده و پس از اجرای مجموعه دستورات و امكانات موجود در صفحه صدازده شده، كنترل مجددا به صفحه اوليه برگردانده می شود. بنابراين می توان برخی از صفحات را بصورت عمومی طراحی ( كيت های نرم افزاری ) و در ادامه از طريق صفحات ديگر آنها را فعال و زمينه استفاده از خدمات دهی آنها به صفحات صدازننده را فراهم نمود. هر كيت نرم افزاری پس از ارائه خدمات مربوطه خود، كنترل را برای ادامه سرويس دهی در اختيار صفحه صدا زننده خود برمی گرداند.

مثال ۱: در مثال زير صفحه شماره يك ( Page1 ) با استفاده از Server.Execute صفحه دوم (Page2) را فعال و صفحه دوم پس از اجرا و اتمام وظايف محوله، مجددا كنترل را به صفحه اول برمی گرداند.

/Myscripts/Page2.asp"
Server.Execute(JumpPage)
...
%>

Page2.asp
<%
...
%>
نكته بسيار مهم در اين فراخوانی امكان استفاده از اشياء از قبل ساخته شده (Built-in) و استفاده شده در صفحه اوليه، توسط صفحه صدا زده شده است. به عبارت ديگر تمامی نمونه اشياء استفاده شده در صفحه اوليه با صفحه صدازده شده به اشتراك گذاشته خواهند شد. مثلا در صورتيكه در صفحه اوليه از شئ Request استفاده شده و به كمك مجموعه های Form و يا QueryString اقدام به خواندن اطلاعاتی از طريق يك فرم شده است، اين مقادير نيز توسط صفحه صدا زده شده قابل استفاده خواهند بود.

بهترين جايگاه استفاده از Server.Execute زمانی است كه قصد استفاده پويا از فايل های ديگری را داشته باشيم ( Dynamic Include ) در صورتيكه چنين هدفی را دنبال نمی كنيم، استفاده از SSI توصيه می گردد.

Server.Transfer
از امكان فوق می توان در جهت بهبود طراحی صفحات ASP استفاده كرد. ويژگی فوق را نمی توان بعنوان گزينه ای برای طراحی صفحات ماژولار نظير SSI و يا Server.Execute در نظر گرفت. عملكرد امكان فوق در اكثر موارد مشابه Server.Execute است با اين تفاوت مهم كه پس از انتقال به صفحه دوم، كنترل مجددا به صفحه اول ( صدازننده) برگردانده نخواهد شد.

مثال ۲: در مثال زير صفحه شماره يك ( Page1 ) با استفاده از Server.Transfer صفحه دوم (Page2) را فعال و صفحه دوم پس از اجرا و اتمام وظايف محوله، كنترل را به صفحه اول برنمی گرداند.

/Myscripts/Page2.asp"
Server.Transfer(JumpPage)
...
%>

Page2.asp
<%
...
%>
تمامی اشياء Built-in در صفحه اول در اختيار صفحه دوم نيز قرار گرفته و زمينه استفاده از مجموعه های مرتبط با هر يك از اشياء در اين صفحه نيز فراهم خواهد شد.

جايگاه استفاده از Server.Transfer در مواردی است كه بخواهيم پس از انجام عمليات خاصی، نقطه خروج آنها را به يك صفحه خاص هدايت نمائيم. مثلا فرض كنيم كه دارای سايتی هستيم كه از طريق صفحات متفاوت، اطلاعاتی توسط كاربران ارسال و در نهايت در بانك های اطلاعاتی از قبل طراحی شده قرار می گيرند. در چنين حالتی می توان پس از اطمينان از صحت اطلاعات و ذخيره آنان در بانك های اطلاعاتی مرتبط، صفحه ای با نام SaveOk.asp داشته باشيم كه در اين صفحه به كاربر اعلام می نمائيم، اطلاعات شما دريافت و در بانك اطلاعاتی سيستم ذخيره گرديد. صفحه فوق را می توان از طريق صفحات متفاوت ديگر بكمك Server.Transfer فعال نمود. با اين كار مسئوليت ارائه پيامهای دريافت اطلاعات بهمراه پارامترهای مربوطه متمركز شده و از نوشتن كدهای تكراری در اين خصوص جلوگيری بعمل می آيد. وضعيت فوق را می توان در موارد بسياری نظير: متمركز نمودن پيامهای خطا، متمركز نمودن كنترل های لازم بر روی فيلدهای موجود بر روی يك فرم، متمركز نمودن اطلاعات كمكی (Help ) به كاربران سايت و استفاده نمود.
 

p4ym4n

کاربر ويژه
اجرای ASP روی كامپيوتر خودتان

در اين مقاله برای مبتديان روش اجرای ASP و برنامه های مورد نياز توضيح داده شده است.

--------------------------------------------------------------------------------
شما ميتوانيد ASP را روی كامپيوتر خود و بدون احتياج به يك سرور بيرونی نيز اجرا كنيد. برای اين منظور شما بايد يكی از برنامه های PWS يا IIS را روی كامپيوتر خود نصب كنيد.
اگر شما در مورد استفاده از ASP چندان هم جدی نباشيد، حداقل بايد ويندوز98 نسخه دوم را داشته باشيد.
اما اگر واقعاً در مورد استفاده از ASP جدی هستيد و ميخواهيد به صورت حرفه ای از آن استفاده كنيد، بايد از ويندوز 2000 يا ويندوزهای جديدتر استفاده كنيد.

چگونگی نصب PWS و اجرای ASP روی ويندوز 95
برنامه PWS (Personal Web Server) همراه ويندوز 95 ارائه نشده است.
برای اجرای ASP روی ويندوز95 شما می توانيد به اين آدرس برويد.
و Windows NT 4.0 Option Pack را از مايكروسافت دريافت كنيد.

چگونگی نصب PWS و اجرای ASP روی ويندوز NT
برنامه PWS همراه ويندوز NT نيز ارائه نشده است.
برای اجرای ASP روی ويندوزNT شما می توانيد به اين آدرس برويد.
و Windows NT 4.0 Option Pack را از مايكروسافت دريافت كنيد.

چگونگی نصب PWS و اجرای ASP روی ويندوز 98
۱- فلدر Add-ons را از روی cd ويندوز98 بازكنيد و سپس فلدر pws راپيداكنيد و setup.exe را اجرا كنيد.
۲- يك فلدر به اسم Inetpub در هارد درايو شما ايجاد شده، آن را باز كنيد و فلدر wwwroot را پيدا كنيد.
۳- يك فلدر جديد مثلMyWeb در wwwroot ايجاد كنيد.
۴- فايل ASP خود را مانند test1.asp در MyWeb كپی كنيد.
۵- مطمئن بشويد كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در اين حالت قرار دارد)
۶- جستجوگر خود را باز كرده و آدرس
http://localhost/MyWeb/test1.asp
را وارد كنيد تا اولين صفحه ASP خود را ببينيد.

چگونگی نصب IIS و اجرای ASP روی ويندوز 2000
۱- از دگمه Start به Settings و بعد به Control Panel برويد.
۲- در پنجره Control Panel ، Add/Remove Programs را انتخاب كنيد.
۳-در پنجره Add/Remove Programs گزينه Add/Remove Windows Components را انتخاب كنيد.
۴- در پنجره Wizard ، Internet Information Services را انتخاب كرده و روی OK كليك كنيد.
۵- يك فلدر به اسم Inetpub در هارد درايو شما ايجاد خواهد شد.
۶- Inetpub را باز كنيد و فلدر wwwroot را پيدا كنيد.
۷- يك فلدر جديد مثلMyWeb در wwwroot ايجاد كنيد.
۸- - فايل ASP خود را مانند test1.asp در MyWeb كپی كنيد.
۹- مطمئن بشويد كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در اين حالت قرار دارد)
۱۰- جستجوگر خود را باز كرده و آدرس
http://localhost/MyWeb/test1.asp
را وارد كنيد تا اولين صفحه ASP خود را ببينيد.

چگونگی نصب IIS و اجرای ASP روی Windows XP Professional
توجه: شما نمی توانيد ASP را روی نگارش خانگی XP اجرا كنيد.
۱- از دگمه Start به Settings و بعد به Control Panel برويد.
۲- در پنجره Control Panel ، Add/Remove Programs را انتخاب كنيد.
۳-در پنجره Add/Remove Programs گزينه Add/Remove Windows Components را انتخاب كنيد.
۴- در پنجره Wizard ، Internet Information Services را انتخاب كرده و روی OK كليك كنيد.
۵- يك فلدر به اسم Inetpub در هارد درايو شما ايجاد خواهد شد.
۶- Inetpub را باز كنيد و فلدر wwwroot را پيدا كنيد.
۷- يك فلدر جديد مثلMyWeb در wwwroot ايجاد كنيد.
۸- فايل ASP خود را مانند test1.asp در MyWeb كپی كنيد.
۹- مطمئن بشويد كه وب سرور شما در حال اجرا است.(البته به صورت معمول خود در اين حالت قرار دارد)
۱۰- جستجوگر خود را باز كرده و آدرس
http://localhost/MyWeb/test1.asp
را وارد كنيد تا اولين صفحه ASP خود را ببينيد.
 

p4ym4n

کاربر ويژه
ايجا يك سيستم Login برای ورود اعضاء يك سايت

--------------------------------------------------------------------------------
امروزه اغلب سايتهايی را كه مشاهده می كنيد معمولا دارای يك سيستم Login هستند كه بوسيله يك شناسه كاربری (UserID) و يك كلمه عبور (Password)، قادر به تشخيص افراد خاصی از ميان تمام مراجعه كنندگان به سايت هستند.

يك نمونه بارز آن صفحه SignIn سايت معروف Yahoo! برای ورود به پست الكترونيك كاربران است كه ياهو پس از بررسی وجود شناسه كاربری و صحت كلمه عبور وارد شده، به كاربران اجازه ورود به صندوق پستی خود را می دهد.

در اين مقاله سعی شده است با ساخت يك برنامه ساده Login توضيحاتی درباره ساختار و نحوه كار آنها بيان نماييم :

قبل از هر چيز ما نياز به ساختن يك بانك اطلاعاتی برای ذخيره كردن اطلاعات كاربران سايت داريم. اين بانك اطلاعاتی می تواند بوسيله برنامه های مختلفی از جمله Access ساخته شود. بانك اطلاعاتی مورد نياز برای اين برنامه شامل يك جدول بنام Members و دو ستون به نامهای UserID وPassword برای ذخيره اطلاعات كاربران است.

همچنين دستور SQL برای ساختن اين جدول در صفحات ASP بصورت زير است:

Create Table Members (
UserID(20)
Password(15)
)

پس از ساختن اين بانك اطلاعاتی نياز به ساخت يك فرم ساده برای دريافت اطلاعات كاربران داريم كه آنرا در داخل صفحه ای بنام Login.htm می سازيم.

اين صفحه به سادگی و بوسيله دستورات مقدماتی HTML قابل تهيه است.

<HTML>
<HEAD><TITLE>Login</TITLE></HEAD>
<BODY>
<TABLE cellSpacing="0" cellPadding="0" border="0" width="300" align="center">
<TR><TD align="center" Colspan="2"><H2>Login Members</H2></TD></TR>
<TR Height="35">
<TD align="right" Width="100">
<FORM Method="post" Action="Login_Action.asp">
[COLOR=[URL=http://www.iranjoman.com/usertag.php?do=list&action=hash&hash=333333%5D%5BFONT%3DTahoma%5DUserID%26nbsp]#333333]UserID&nbsp[/URL]: [/COLOR]
</TD>
<TD align="Left">
<INPUT type="text" name="UserID" Size="20">
</TD>
</TR>
<TR Height="35">
<TD align="right">
[COLOR=[URL=http://www.iranjoman.com/usertag.php?do=list&action=hash&hash=333333%5D%5BFONT%3DTahoma%5DPassword%26nbsp]#333333]Password&nbsp[/URL]: [/COLOR]
</TD>
<TD align="left">
<INPUT type="Password" name="Password" Size="20">
</TD>
</TR>
<TR Height="35"><TD align="center" Colspan="2">
<INPUT type="Submit" name="Submit" value="Login">
</TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
در كد بالا چند نكته قابل توجه وجود دارد :

Form method=Post: نحوه ارسال اطلاعات فرم را مشخص می كند. بدين صورت كه اگر ما بخواهيم اطلاعات دريافتی از يك كاربر را به صفحه ديگری برای پردازش ارسال كنيم، بايد از اين متد، يعنی متد Post استفاده كنيم. اطلاعاتی كه بوسيله متد Post ارسال می شوند، در صفحه بعدی بوسيله شئ Request و بصورت زير قابل بازيابی هستند.

Request.Form("fieldname")

Action=Login_Action.asp: مقداری كه در مقابل ويژگی Action در دستور Form قرار گرفته، نام فايلی است كه اطلاعات فرم پس از دريافت از كاربر، به آن صفحه ارسال می شود.

ويژگی Name در دستور Input: نام متغيری است كه كلمه ورودی كاربر در فيلد جاری در آن ذخيره می شود. هر كلمه ای كه كاربر در يك فيلد وارد می كند در صفحه مقصد بوسيله نامی كه برای آن فيلد تعيين شده قابل دسترسی است.

پس از ساخت بانك اطلاعاتی و يك فرم ساده برای دريافت اطلاعات كاربران، نوبت به ساخت صفحه ای برای پردازش و پاسخ متقابل به اطلاعات ورودی كاربران است. اين صفحه را با نام Login_Action.asp می سازيم.

<%@Language="VBScript"%>
<%
User = Request.Form("UserID")
Pass = Request.Form("Password")
Set AdoCon = Server.CreateObject("ADODB.Connection")
StrCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Users.mdb")
AdoCon.Open StrCon
Set AdoRec = Server.CreateObject("ADODB.Recordset")
StrSQL = "SELECT * FROM Members WHERE UserID ='" & User & "'"
AdoRec.Open StrSQL, StrCon
IF NOT AdoRec.EOF Then
IF Pass = Trim(AdoRec("Password")) Then
Response.Write ("Welcome " & User)
Else
Response.Write ("Invalid Password")
End IF
Else
Response.Write ("Invalid UserID")
End IF
Set AdoCon = Nothing
Set StrCon = Nothing
Set AdoRec = Nothing
%>
 

p4ym4n

کاربر ويژه
ايجا يك سيستم Login برای ورود اعضاء يك سايت قسمت دوم

--------------------------------------------------------------------------------
امروزه اغلب سايتهايی را كه مشاهده می كنيد معمولا دارای يك سيستم Login هستند كه بوسيله يك شناسه كاربری (UserID) و يك كلمه عبور (Password)، قادر به تشخيص افراد خاصی از ميان تمام مراجعه كنندگان به سايت هستند.

يك نمونه بارز آن صفحه SignIn سايت معروف Yahoo! برای ورود به پست الكترونيك كاربران است كه ياهو پس از بررسی وجود شناسه كاربری و صحت كلمه عبور وارد شده، به كاربران اجازه ورود به صندوق پستی خود را می دهد.

در اين مقاله سعی شده است با ساخت يك برنامه ساده Login توضيحاتی درباره ساختار و نحوه كار آنها بيان نماييم :

قبل از هر چيز ما نياز به ساختن يك بانك اطلاعاتی برای ذخيره كردن اطلاعات كاربران سايت داريم. اين بانك اطلاعاتی می تواند بوسيله برنامه های مختلفی از جمله Access ساخته شود. بانك اطلاعاتی مورد نياز برای اين برنامه شامل يك جدول بنام Members و دو ستون به نامهای UserID وPassword برای ذخيره اطلاعات كاربران است.

همچنين دستور SQL برای ساختن اين جدول در صفحات ASP بصورت زير است:

Create Table Members (
UserID(20)
Password(15)
)

پس از ساختن اين بانك اطلاعاتی نياز به ساخت يك فرم ساده برای دريافت اطلاعات كاربران داريم كه آنرا در داخل صفحه ای بنام Login.htm می سازيم.

اين صفحه به سادگی و بوسيله دستورات مقدماتی HTML قابل تهيه است.

<HTML>
<HEAD><TITLE>Login</TITLE></HEAD>
<BODY>
<TABLE cellSpacing="0" cellPadding="0" border="0" width="300" align="center">
<TR><TD align="center" Colspan="2"><H2>Login Members</H2></TD></TR>
<TR Height="35">
<TD align="right" Width="100">
<FORM Method="post" Action="Login_Action.asp">
[COLOR=[URL=http://www.iranjoman.com/usertag.php?do=list&action=hash&hash=333333%5D%5BFONT%3DTahoma%5DUserID%26nbsp]#333333]UserID&nbsp[/URL]: [/COLOR]
</TD>
<TD align="Left">
<INPUT type="text" name="UserID" Size="20">
</TD>
</TR>
<TR Height="35">
<TD align="right">
[COLOR=[URL=http://www.iranjoman.com/usertag.php?do=list&action=hash&hash=333333%5D%5BFONT%3DTahoma%5DPassword%26nbsp]#333333]Password&nbsp[/URL]: [/COLOR]
</TD>
<TD align="left">
<INPUT type="Password" name="Password" Size="20">
</TD>
</TR>
<TR Height="35"><TD align="center" Colspan="2">
<INPUT type="Submit" name="Submit" value="Login">
</TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
در كد بالا چند نكته قابل توجه وجود دارد :

Form method=Post: نحوه ارسال اطلاعات فرم را مشخص می كند. بدين صورت كه اگر ما بخواهيم اطلاعات دريافتی از يك كاربر را به صفحه ديگری برای پردازش ارسال كنيم، بايد از اين متد، يعنی متد Post استفاده كنيم. اطلاعاتی كه بوسيله متد Post ارسال می شوند، در صفحه بعدی بوسيله شئ Request و بصورت زير قابل بازيابی هستند.

Request.Form("fieldname")

Action=Login_Action.asp: مقداری كه در مقابل ويژگی Action در دستور Form قرار گرفته، نام فايلی است كه اطلاعات فرم پس از دريافت از كاربر، به آن صفحه ارسال می شود.

ويژگی Name در دستور Input: نام متغيری است كه كلمه ورودی كاربر در فيلد جاری در آن ذخيره می شود. هر كلمه ای كه كاربر در يك فيلد وارد می كند در صفحه مقصد بوسيله نامی كه برای آن فيلد تعيين شده قابل دسترسی است.

پس از ساخت بانك اطلاعاتی و يك فرم ساده برای دريافت اطلاعات كاربران، نوبت به ساخت صفحه ای برای پردازش و پاسخ متقابل به اطلاعات ورودی كاربران است. اين صفحه را با نام Login_Action.asp می سازيم.

<%@Language="VBScript"%>
<%
User = Request.Form("UserID")
Pass = Request.Form("Password")
Set AdoCon = Server.CreateObject("ADODB.Connection")
StrCon = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Users.mdb")
AdoCon.Open StrCon
Set AdoRec = Server.CreateObject("ADODB.Recordset")
StrSQL = "SELECT * FROM Members WHERE UserID ='" & User & "'"
AdoRec.Open StrSQL, StrCon
IF NOT AdoRec.EOF Then
IF Pass = Trim(AdoRec("Password")) Then
Response.Write ("Welcome " & User)
Else
Response.Write ("Invalid Password")
End IF
Else
Response.Write ("Invalid UserID")
End IF
Set AdoCon = Nothing
Set StrCon = Nothing
Set AdoRec = Nothing
%>
 

p4ym4n

کاربر ويژه
آشنائی با کوکی ها و روش استفاده آنها در ASP کلاسيک

--------------------------------------------------------------------------------
Cookie چيست؟
از يك كوكی می توان برای تشخيص كاربر استفاده كرد. کوکی يك فايل كوچك است كه سرور روی كامپيوتر كاربر قرار می دهد و هر مرتبه كه كاربر با همان مرورگر با آ ن سرور ارتباط برقرار می كند آن كوكی را نيز می فرستد. با استفاده از ASP هم می توان كوكی ايجاد كرد و هم آن ها را بازخوانی نمود.

چگونگی ساخت يك كوكی
فرمان Response.Cookies برای ساخت كوكی مورد استفاده قرار می گيرد:

<%
Response.Cookies("firstname")="Alex"
%>

ما در مثال بالا يك كوكی به اسم firstname ساخته ايم و مقدار Alex را به آن داده ايم. نكته مهم در اينجا اين است كه دستور Response.Cookies بايد قبل از برچسب <HTML> قرار گرفته باشد. همچنين می توان به يك كوكی چند صفت داد، مثل تاريخی كه بايد در كامپيوتر كاربر از بين برود:

<%
Response.Cookies("firstname")="Alex"
Response.Cookies("firstname").Expires="May 10,2002"
%>

حالا كوكی با اسم firstname مقدار Alex را دارد و در تاريخ 10 می 2002 از كامپيوتر كاربر پاك خواهد شد.

چگونگی گرفتن مقدار يك كوكی
دستور Request.Cookies برای خواندن مقدار يك كوكی مورد استفاده قرار می گيرد. در مثال زير ما مقدار كوكی firstname را بازخوانی می كنيم و آن را نمايش می دهيم:

<%
fname=Request.Cookies("firstname")
response.write("Firstname=" & fname)
%>

يك كوكی با كليدها
يك كوكی همچنين می تواند شامل مجموعه ای از مقدارهای متعدد باشد، كه در اينصورت گفته می شود كوكی دارای كليدهايی است. در مثال زير ما يك كوكی به اسم user خواهيم ساخت كه دارای كليدهايی است كه شامل اطلاعات كاربر است:

<%
Response.Cookies("user")("firstname")="Alex"
Response.Cookies("user")("lastname")="Nasser"
Response.Cookies("user")("country")="Iran"
Response.Cookies("user")("age")="20"
%>

خواندن همه كوكی ها
مثال زير تمام كوكی هايی كه سرور شما به كاربر فرستاده است را می خواند. توجه كنيد كه كد زير بررسی می كند كه آيا كليدهای كوكی دارای صفت HasKeys هستند يا نه:

<p>")
if Request.Cookies(x).HasKeys then
for each y in Request.Cookies(x)
response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
response.write("<br /")
next
else
Response.Write(x & "=" & Request.Cookies(x) & "<br />")
end if
response.write "</p>"
next
%>
</body>
</html>
 

p4ym4n

کاربر ويژه
راهكارهائی برای بهبود طراحی صفحات ASP – بخش سوم

همزمان با ارائه نسخه 5 Vbscript توسط شركت ماكروسافت، پياده كنندگان نرم افزار اين امكان را بدست آوردند كه بتوانند از كلاس هائی نظير آنچه در ويژوال بيسيك استفاده می گردد نيز استفاده نمايند. كلاس ها با رويكرد برنامه نويسی شئ گراء ايجاد و به طراحان صفحات ASP اين امكان را خواهد داد تا قادر به استفاده از كدهای قبلی خود در ساير صفحات ASP خود باشند. كلاس ها توسط طراحان ذيربط بعنوان ماژول های جعبه سياه بگونه ای طراحی می گردنند كه ساير استفاده كنندگان بدون نياز به آگاهی از جزئيات مربوط به هر كلاس و بهره مندی از متدها و صفات ( ويژگی ها ) يك كلاس از توانائی آن در برنامه های خود استفاده نمايند. در ابتدا لازم است كه يك مرور سريع به برنامه نويسی شئ گراء داشته باشيم.

برنامه نويسی شئ گراء (OOP)، يك متدولوژی برنامه نويسی است كه در آن هر موجوديت با نام يك شئ ( Object) شناخته می شود. هر شئ شامل صفت ( Properties ) و متدها ( Methods ) است. يك صفت ويژگی های يك شئ را تشريح می کند در حاليكه يك متد عمليات خاصی را بر روی يك شئ انجام می دهد. شما بعنوان يك طراح صفحات ASP، به دفعات از اشياء تعريف شده توسط ديگران استفاده كرده و می كنيد. مثلا ADO يا ActiveX Data Object، چيزی بيشتر از يك مجموعه از اشياء طراحی شده برای دستيابی به بانك های اطلاعاتی نيست. زمانيكه از ADO برای دستيابی به بانك های اطلاعاتی استفاده می شود، استفاده كننده نياز به دانش و آگاهی لازم جهت شناخت نوع پروتكل مورد نياز ارتباطی با يك بانك اطلاعاتی نبوده و بسادگی با استفاده از متد Open مربوط به شئ Connection با يك بانك اطلاعاتی مرتبط خواهد شد. بمنظور شناخت كامل برنامه نويسی شئ گراء، لازم است بين دو مفهوم يك شئ (Object) و يك نمونه از شئ (Instance Object) تفاوت قائل شويم. يك شئ نظير شئ Connection، مربوط به ADO يك آيتم خيالی است. در حقيقت اين شئ بصورت فيزيكی وجود نداشته و صرفا بمنزله يك قالب ( Template ) برای ايجاد يك نمونه در نظر گرفته می شود. يك نمونه (Instance)، يك هويت ( موجوديت ) فيزيكی از يك شئ است. در مثال زير ADODB.Connection يك شئ بوده در حاليكه ObjConn نمونه ای از شئ Connection است.

Dim ObjConn
Set ObjConn=Server.CreateObject("ADODB.Connection")

ما می بايست از هر شئ نمونه ای را داشته باشيم تا بتوانيم با استفاده از فراخوانی متدهای مربوطه و يا تغيير و استفاده از صفات ذيربط، زمينه مناسب جهت استفاده عملی از آن را فراهم نمائيم. در يك مثال واقعی از ارتباط شئ / نمونه، می توان مثال معروف اتومبيل را در نظر گرفت. يك ماشين يك شئ است. اين شئ يك طرح اوليه (Templeate) برای تشريح ويژگی ها و عملكردهای يك اتومبيل خواهد بود. يك "پرايد" نمونه ای از يك اتومبيل است كه با بكارگيری متدها و صفات مربوطه، می توان عمليات دلخواه و از قبل تعريف شده را بر روی نمونه فوق انجام داد.

كپسوله نمودن پيچيدگی ها
برنامه نويسی شئ گراء می تواند بعنوان يك راهكار موفق جهت كپسوله نمودن پيچيدگی های مرتبط با فعاليت های خاص نيز مورد توجه جدی قرار گيرد. مثلا فرض نمائيد كه بر روی وب سايت خود نياز داشته باشيم كه يك فايل متنی را بازكرده ( Open )، تعداد خطوط آن را محاسبه ( شمارش ) و ماحصل كار را در يك فايل ديگر ثبت ( Log ) نمائيم. در چنين حالتی در صورتيكه از برنامه نويسی شئ گراء استفاده نكنيم، هر زمان كه قصد انجام مجموعه فعاليت های گفته شده را داشته باشيم، می بايست عمليات زير را مرحله به مرحله انجام داد:

• باز نمودن يك فايل متنی خاص
• شمارش تعداد خطوط موجود در فايل
• بستن فايل متني
• باز كردن فايل مورد نظر برای ثبت ( Logging File )
• ثبت تعداد خطوط شمارش شده
• بستن فايل Log

با اينكه مراحل فوق پيچيده بنظر نمی آيند ولی تصور كنيد كه بخواهيم اين عمليات را در چندين صفحه ASP انجام دهيم. در چنين حالتی می توان بسادگی تمامی مراحل فوق را كپسوله و در يك شئ خاص قرار داد. ببينيم چگونه می توان اين شئ را ايجاد كرد. فرض كنيد نام اين شئ را LogTextFileLines در نظر بگيريم. شئ فوق صرفا دارای يك صفت با نام TextFilePath بوده كه مسير فيزيكی فايل Log را مشخص خواهد كرد. شئ فوق همچنين دارای يك متد با نام UpdateLog بوده كه مسئول شمارش تعداد خطوط در فايل مورد نظر خواهد بود. متد فوق می تواند دارای تعريفی مشابه زير باشد:

Function UpdateLog ( StrFileName )

StrFileName، مسير و نام فايل متنی است كه می بايست تعداد خطوط آن شمارش و ثبت گردد. متد فوق يك ارزش منطقی (Boolean)، را برميگرداند. مقدار فوق موفقيت آميز بودن عمليات را نشان خواهد داد. پس از ايجاد شئ فوق، مراحل شش گانه گفته شده بسادگی انجام خواهند شد:

Dim ObjLog
Set ObjLog = New LogTextFileLines
ObjLog.LogTextFileLine = "C:\MyLogFiles\Linecount.log"
If ObjLog.UpdateLog( "C:\MyTextFiles\Test.Txt") Then
Response.Write("C:\MyTextFiles\Test.txt was logged successfully")
Else
Response.Write("There are an error when attemping to log C:\MyTextFiles\Test.Txt"
End If

همانطور كه مشاهده می شود، استفاده از شئ فوق تمام پردازش روی فايل را بصورت يك جعبه سياه در آورده است. پس از اصول اوليه فوق، در ادامه با نحوه استفاده از كلاس های Vbscript تشريح می گردد.

كلاس های Vbscript صرفا شامل يك Constractor است. يك Constractor، روتينی است كه بلافاصله پس از ايجاد يك نمونه از شئ بصورت اتوماتيك اجرا خواهد شد. متاسفانه Constractor ها در Vbscript نمی توانند پارامتری را بعنوان ورودی اخذ نمايند. در ضمن كلاس های Vbscript، توارث را نيز حمايت نمی كنند.

در زمان ايجاد يك كلاس، می بايست به اين نكته توجه شود كه شما در حال توليد و ساخت ابزاری هستيد كه قرار است توسط ساير طراحان مورد استفاده قرار گيرد. پياده كنندگانی را كه برای ساير پياده كنندگان كلاس هائی را ايجاد می كنند Class Developer و پياده كنندگانی را كه از اين كلاس ها استفاده می نمايند End Developer می گويند. كلاس هائی كه توسط Vbscript ايجاد می شود را نمی توان مانند عناصر COM، كامپايل نمود. بنابراين يك End Developer كه قصد استفاده از كلاس فوق را در صفحات ASP داشته باشد، می بايست تعريف كلاس را بهمراه كدهای ASP داشته باشد. بنابراين روش مناسب اين است كه تعاريف مربوط به كلاس ها را در يك فايل متنی قرار داد و بدين ترتيب استفاده كنندگان از كلاس فوق با استفاده از SSI ( استفاده از فايل های ضميمه ) قادر به استفاده از كلاس های فوق در صفحات ASP خود خواهند بود. پس از ايجاد يك كلاس، پياده كنندگان كلاس ها می بايست به اين نكته توجه نمايند كه اعمال هر گونه تغيير در يك كلاس می بايست بگونه ای باشد كه باعث بروز اشكال در متدها و صفات قبلی تعريف شده نگردد.

ايجاد يك كلاس
برای ايجاد يك كلاس از دستورالعمل Class كه دارای گرامری مشابه زير است، استفاده می شود:

Class Name_Of_Class
' تعريف متدها و صفات مربوطه
End Class

رويدادهای آغاز و خاتمه
زمانيكه كلاس ها ايجاد می گردنند، دو رويداد مهم در اين زمينه نقش مهمی را برعهده خواهند گرفت : رويداد مقداردهی اوليه (Initilize) و رويداد خاتمه (Terminate). رويداد مقداردهی اوليه زمانيكه توسط دستور New يك نمونه يا مصداق از كلاسی ايجاد می گردد، فعال خواهد شد.

مثال ۱- دستورات زير يك نمونه از كلاسی با نام SomeObject را ايجاد می كنند.

Dim ObjSomeObjectInstance
Set ObjSomeObjectInstance = New SomeObject

رويداد خاتمه زمانيكه به حيات نمونه ای از يك شئ خاتمه داده می شود، فعال خواهد شد. حيات نمونه ای از كلاس يا با استفاده از عبارتی نظير ObjSomeObjectInstance = Nothing با صراحت اعلان می گردد و يا زمانيكه از حوزه ای كه شئ را تعريف كرده ايم، خارج شويم، بدين ترتيب زمينه اجرای رويداد فوق فراهم خواهد شد. رويدادهای دوگانه فوق را می توان در زمان طراحی يك كلاس، تعريف نمود. رويداد مقداردهی اوليه را برای مقداردهی اوليه صفات يك كلاس يا انجام عمليات خاص مورد نياز برای شروع استفاده از يك كلاس می توان استفاده كرد. رويداد مقداردهی اوليه را Constractor می نامند. رويداد خاتمه را می توان جهت انجام عمليات خاصی كه مورد نياز اتمام فعاليت يك كلاس است، استفاده كرد. رويداد فوق را Deconstractor می نامند.

مثال۲- در مثال زير يك كلاس بهمراه رويدادهای آغاز و خاتمه تعريف شده است.

Class SomeObject
Private Sub Class_Initialize( )

End Sub
Private Sub Class_Terminate( )

End Sub
End Class

رويداد Class_Initialize زمانيكه يك نمونه از يك شئ ايجاد می گردد، بصورت اتوماتيك اجراء خواهد شد. رويداد Class_Terminate زمانيكه نمونه تعريف شده از يك شئ از بين می رود، بصورت اتوماتيك اجراء خواهد شد.

Properties , Methods , Member Variables , Member Function
از ديدگاه استفاده كننده از يك كلاس، يك كلاس شامل مجموعه ای از صفات و متدها است. صفات، متغيرهائی هستند كه پياده كنندگان را قادر به تغيير و يا استفاده از آنان بمنظور مشخص نمودن وضعيت يك كلاس می كنند. متدها توابعی هستند كه پياده كنندگان را قادر به انجام عمليات خاصی را بر روی يك كلاس می كنند. مثلا شئ ADODB.Connection شامل صفاتی است كه وضعيت يك نمونه از شئ ايجاد شده را تشريح خواهد كرد.( نظير ConnectionString,ConnectionTimeOut, ) متدهائی نظير Open , Close عمليات خاصی را در رابطه با نمونه شئ ايجاد شده، انجام خواهند داد. يك كلاس می تواند دارای صفات و يا متدهائی باشد كه يك استفاده كننده از كلاس، نمی تواند آنها را مستقيما استفاده و فعال نمايد. اين متغيرها و توابع مخفی، Member Variables و Member Function ناميده می شوند. بنابراين در صورتيكه يك استفاده كننده قادر باشد مستقيما تابعی را فعال نمايد به آن متد و در غيراينصورت به آن Member Function می گويند. اين وضعيت در رابطه با صفات نيز صدق می كند. در صورتيكه يك استفاده كننده از كلاسی قادر به صدا زدن و استفاده از يك متغير كلاس باشد از آن با نام Property نام برده می شود، در غير اينصورت به آن Member Variable می گويند.

عبارات Prtivate , Public
همانطور كه قبلا گفته شد، كپسوله نمودن پيچيدگی ها، يكی از اهداف برنامه نويس شئ گراء است. در اين حالت جزئيات پياده سازی از ديد استفاده كنندگان يك كلاس مخفی نگه داشته می شود. Vbscript اين امكان را فراهم می سازد كه بتوان در زمان طراحی يك كلاس، برخی از متدها و صفات يك شئ را از ديد استفاده كنندگان آن كلاس، مخفی نگه داشت. برای ايجاد Member Function و Member Variable از واژه Private قبل از نام يك تابع و يا يك صفت استفاده می شود. يك Member Function صرفا توسط متد ديگری از كلاس مورد نظر و يا يك Member Function ديگر صدا زده می شود. يك Member Variable را می توان توسط يك متد و يا يك Member Function تغيير و استفاده نمود. با استفاده از امكانات Property Get , Property Let , Property Set نيز امكان تغيير و استفاده از اين نوع متغيرها وجود خواهد داشت. برای ايجاد يك صفت و يا يك متد كافی است قبل از نام آنها از واژه Public استفاده كرد. در صورتيكه قبل از نام يك متد و يا يك صفت با صراحت نوع آنها ( Public,Private ) مشخص نگردد، بصورت پيش فرض Public در نظر گرفته خواهند شد.

مثال ۳- در مثال زير يك كلاس ايجاد و صفات و متدهای Public و Private برای آن تعريف شده است.

Class myclass
Public Sub A_Public_Method( )
در اين محل می توان متدهای Private را صدا زد.
A_Private_Method
End Sub
Public A_Public_Property
Private Sub A_Private_Method( )
...
End Sub
Private A_Private_Property
End Class

همانگونه كه در مثال فوق مشاهده می نمائيد، زمانيكه از واژه های Private و Public بهمراه متغيرها استفاده می گردد، ديگر نيازی با استفاده از عبارت Dim نخواهد بود. در صورتيكه با صراحت نوع يك متغير را مشخص ننمائيم، می بايست قبل از نام اين نوع متغيرها از عبارت Dim استفاده شود. در چنين وضعيتی اين نوع متغيرها بصورت Public در نظر گرفته خواهند شد.

توصيه می گردد كه همواره با صراحت نوع يك متغير و يا يك تابع را توسط بكارگيری واژه های Private و يا Public مشخص نمود. در صورتيكه يك استفاده كننده از كلاس قصد دستيابی به متدها و صفات Private نمونه شئ myclass را در يك برنامه داشته باشد، با يك پيام خطا مواجه می گردد.

مثال ۴- در مثال زير نحوه دستيابی به توابع و صفات Private و Public با تاكيد بر شئ myclass كه در مثال ۳ تعريف شده بود، نشان داده می شود.

Dim Objmyclass
Set Objmyclass = New myclass
Objmyclass.A_Public_Method( ) 'Valid Calling
Objmyclass.A_Public_Oroperty = 12 'Valid Calling
Objmyclass.A_Private_Method 'Invalid Calling
Objmyclass.A_Private_Property = 120 'Invalid Calling
Dim Ivalue
'Invalid Calling Ivalue = Objmyclass,A_Private_Property

استفاده از Property Get
نمامی متغيرها در Vbscript از نوع Variant بوده و اگر يك متغير Public را تعريف كنيم، هيچگونه كنترلی از بعد نوع محتوائی كه استفاده كننده به آن نسبت خواهد داد، وجود نخواهد داشت. مثلا فرض كنيد كه صفتی با نام PhoneNumber در يك كلاس تعريف كرده باشيم، بديهی است كه متغير فوق قرار است شماره تلفن ها را در خود ذخيره نمايد. استفاده كنندگان از كلاس فوق می توانند بسادگی يك بردار، نمونه ای از يك شئ و ساير موارد را به آن نسبت دهند. بمنظور حل مشكلاتی از اين نوع يك متغير Private در كلاس ايجاد و در ادامه متدی Public را جهت دستيابی و استفاده از اين متغير تعريف می كنيم. در Vbscript تمامی صفات را می توان بصورت Private تعريف و در صورتيكه بخواهيم استفاده كنندگان از كلاس فوق، قادر به خواندن مقدار اين صفت باشند، با استفاده از عبارت Property Get در كلاس، امكان استفاده از آن را می توان فراهم كرد. عبارت فوق دارای گرامری مطابق زير است:

[ Public | Private ] Property Get propertyName [ ( arglist) ]
'...assign the value of the private property to propertyname
End Property

مثال ۵- در مثال زير يك صفت با نام strphonebumber تعريف شده است.

Class Information
Private StrPhoneNumber
End class

در ادامه اگر بخواهيم كه ساير استفاده كنندگان از شئ فوق، قادر به خواندن مقدار StrPhoneNumber باشند، می توانيم از عبارت Property Get مشابه زير استفاده نمود:

Class Information
Private StrPhoneNumber
Public Property Get PhoneNumber ( )
PhoneNumber = strPhoneNumber
End Property
End class

پس از انجام عمليات فوق، ساير استفاده كنندگان از كلاس فوق می توانند با استفاده از كدهائی مشابه زير به StrPhoneNumber دستيابی داشته باشند.

Dim Objinfo
Set objinfo = New Information
Response.Write " Phone number = " & Objinfo.PhoneNumber 'Valid
Response.Write " Phone number = " & Objinfo.StrPhoneNumber 'Invalid

در صورتيكه صفت برگردانده شده توسط Property Get، يك شئ باشد، می بايست از عبارت Set در زمان مقداردهی استفاده نمود. مثلا اگر StrPhoneNumber بجای يك رشته شامل يك شئ ديكشنری باشد، عبارت Property Get مورد نياز بصورت زير نوشته خواهد شد:

Public Property Get PhoneNumber( )
Set PhoneNumber = StrPhoneNumber
End Property

عنصر arglist مربوط به عبارت Property Get زمانی مورد استفاده قرار می گيرد كه صفت به يك پارامتر، ايندكس نياز داشته باشد. مثلا در صورتيكه يك بردار را بعنوان يك صفت Private داشته باشيم و بخواهيم به استفاده كنندگان از كلاس فوق امكان خواندن يك المان خاص از بردار را بدهيم ، می بايست از كد مشابه زير استفاده كرد:

Class Information
Private Iostan( )
Private sub Class_Initialize( )
ReDim Iostan(27)
Iostan(0) = "Khoozestan"
...
End Sub
Public Property Get Ostan(Index)
Ostan = Iostan(Index)
End Property
End Class

پس از ايجاد نمونه ای از شئ Information، می توان از كدهای زير برای خواندن يك مقدار خاص از بردار Iostan، استفاده كرد.

Dim ObjInfo
Set ObjInfo = New Information
Response.write ObjInfo_Ostan( 0)
Set ObjInfo = Nothing

استفاده از Property Let
Property Get اين امكان را برای استفاده كننده از يك كلاس فراهم می سازد كه بتوانند اقدام به بازيابی يك صفت Private بنمايند. Property Let، اين امكان را برای استفاده كننده از يك كلاس فراهم می سازد كه بتوانند اقدام به مقداردهی اوليه يك صفت Private بنمايند. ويژگی فوق نظير بيمه نمودن يك صفت در مقابل هر گونه حوادث احتمالی و خرابی است. اگر كلاسی بهمراه يك صفت Public و با نام StrPhoneNumber را ايجاد كرده باشيم، استفاده كنندگان از كلاس فوق قادر به مقدار دهی هر نوع ارزشی به اين صفت خواهند بود. بديهی است كه طراح كلاس فوق قصد ندارد اين اجازه را به استفاده كننده از كلاس بدهند كه هر مقداری را به اين صفت نسبت دهند. مقدار نسبت داده شده به صفت فوق می بايست دارای نوع و ارزش قابل قبول باشد. StrPhoneNumber می بايست دارای يك نوع داده با فرمت "#######" باشد. عبارت Property Let اين امكان را فراهم خواهد ساخت كه يك نوع داده بهمراه فرمت مربوطه را تعريف و بررسی های لازم بر روی آن در زمان استفاده توسط يك استفاده كننده فراهم می گردد. گرامر عبارت فوق مشابه زير است:

[ Public | Private ] Property Let propertyName [ ( arglist,) value]
'...Statements : Check to see if value is of the correct datatype
'...and format. If it is,assign value to the private property
End Property

جهت مقداردهی يك مقدار به صفت StrPhoneNumber می توان عبارت Property Let را مطابق زير استفاده نمود:

Class Information
Private StrPhoneNumber
Public Property Let PhoneNumber(StrPhone)
StrPhoneNumber = StrPhone
End Property
End Class

عبارت Property Let فوق، دارای يك فرمت يا بررسی نوع داده و ارزش مربوطه در زمان اختصاص يك مقدار توسط استفاده كنندگان كلاس به StrPhoneNumber نخواهد بود. پارامتر StrPhoneNumber از عبارت Property Let مقداری را كه توسط استفاده كننده از كلاس وارد می شود در خود ذخيره خواهد كرد.

مثال ۶- در اين مثال مقدار 9999999 مقدار پارامتر ورودی بوده كه به صفت PhoneNumber نسبت داده می شود.

Dim ObjInfo
Set ObjInfo = New Information
ObjInfo.PhoneNumber = "9999999"

برای بررسی فرمت كد مربوطه، می بايست تصميم گرفت كه چه نوع فرمتی قابل قبول و چه نوع قالبی غيرپذيرش خواهد بود. مثلا در رابطه با مثال فوق فرمت يك تلفن می تواند بصورت ####### باشد و اگر استفاده كننده از اين كلاس قالبی ديگر را وارد كند، قابل قبول نخواهد بود.

مثال ۷- در اين مثال يك كلاس جديد Information تعريف شده است.

Class Information
Private StrPhoneNumber
Public Property Let PhoneNumber(StrPhone)
If Isobject(StrPhone) Then
Err.Raise vbobjectError + 1000 , "Information Calss","Invalid format for PhoneNumber.
Exit Property
End if
Dim ObjRegExp
Set ObjRegExp = New regexp
ObjregExp.Pattern = "^\d{7}$"
If ObjRegExp.Test(StrPhone) Then
StrPhoneNumber = StrPhone
Else
Err.Raise vbobjectError + 1000 , "Information Calss","Invalid format for PhoneNumber.
End if
Set ObjRegExp = Nothing
End Property
Public Property Get PhoneNumber( )
PhoneNumber = StrPhoneNumber
End Property
End Class

اگر استفاده كننده از كلاس، كدی مطابق زير را اجراء نمايد:

Dim ObjInfo
Set ObjInfo = New Information
ObjInfo.PhoneNumber = " This is an Invalid Phone Number "

يك پيام خطا مبنی بر عدم رعايت فرمت قابل قبول، را دريافت خواهد كرد. عبارت Property Let همچنين دارای يك arglist اختياری نيز هست. اين آرگومان می بايست با arglist عبارت متناظر در Property Get يكسان باشد ( در صورت وجود ) استفاده از Property Set كلاس ها می توانند دارای صفاتی باشند كه خود بمنزله شئ باشند. در چنين حالتی می بايست مراقبت های ويژه ای را در زمان اختصاص ( برگرداندن ) يك شئ از طريق يك Property Get انجام داد.

در Vbscript با استفاده از عبارت Property Set امكان مقداردهی يك نمونه از يك شئ به يك صفت وجود خواهد داشت. گرامر عبارت فوق بشكل زير است:

[ Public | Private ] Property Set propertyName [ ( arglist,) reference]
' Perform any needed checks here , then use
' set ObjPrivateProperty = ProperName
End Property

قالب Property Get تقريبا مشابه Property Let است. تنها تفاوت عملياتی بين آنها در اين است كه عبارت Property Let مقاديری را كه به يك صفت نسبت می دهد از نوع شئ نخواهد بود در حاليكه Property set نمونه ای از يك شئ را كه به يك صفت Private نسبت می دهد. مثلا فرض كنيد دارای كلاسی باشيم كه دارای يك صفت اختصاصی با نام ObjConn باشد، تعريف كلاس، عبارات Property Set و Property Get مطابق زير خواهد بود.

Class MyConnectionClass
Private ObjConn
Public Property Get Connection( )
Set Connection = ObjConn
End Property
Public Property Set Connection( Objconnection)
Set ObjConn = ObjConnection
End Property
End Class

استفاده كنندگان از كلاس با استفاده Property Set مطابق زير از كلاس فوق استفاده خواهند كرد.

Dim ObjMyClass , ObjMyRecordSet
Set ObjMyclass = New MyConnectionClass
Set ObjConnection = Server.Createobject("ADODB.Connection)
Set ObjMyclass.connection = objconnection
 

p4ym4n

کاربر ويژه
معرفی 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 به برنامه های خود ملحق نمائيم.

<!-- #INCLUDE FILE="adovbs.inc" -->

اگر فايل 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 استفاده گردد رکوردی باز گردانده نخواهد شد.

شئ RecordSet
از شی RecordSet جهت نگهداری رکوردها يا جدول دريافتی استفاده می گردد. اين شئ نظير يك جدول بانك اطلاعاتی دارای سطرها و ستون هائی است. در حقيقت شئ فوق يك تصور مجازی از يك جدول خواهد داد و بصورت فيزيكی يك جدول نيست. چراكه مقادير مورد نظری كه در ستون های اين شئ قرار می گيرد ممكن است حاصل تركيب (Join) چندين جدول ديگر باشند.

متد RecordSet.Open
در صورتيكه در هنگام استفاده از شئ RecordSet به هر نوع Cursor ( اشاره گری به هر يك از سطرهای موجود در جدول ) نياز داشته باشيد ( صرفا نه يك Cursor كه بصورت Forward-Only و يا Read-Only باشد ) می بايست به جای استفاده از متد Execute مربوط به شی Connection، مستقيما بانك اطلاعاتی را باز کنيد. شئ RecordSet نيز دارای متدی با نام Open است كه چندين پارامتر را بعنوان پارامتر اخذ می كند.

Recordset.Open CommandText, Connection|ConnectionString, Cursor-Type, LockType, Options

CommandText شامل SQL query بوده، Connection|ConnectionString شامل يك رجوع به شئ Connection باز شده و يا يك پارامتر معتبر Connectionstring است. پارامتر CursorType مقدار خود را از ثابتی با نام adCursorTypeEnm مطابق زير اخذ خواهد كرد:

• adopenForwardOnly: يك Cursor كه فقط امكان حركت بسمت جلو را دارد، برمی گرداند. ( پيش فرض). اگر نوع Cursor را مشخص ننمائيد، ADO همواره Cursor از اين نوع را بر می گرداند. همانگونه كه از نام آن مشخص است، صرفا می توان بسمت جلو در شئ RecordSet حركت نمود.
• AdOpenKeyset: يك Cursor از نوع Keyset را برمی گرداند. در چنين حالتی می توان جهت و نوع حركت را به هر نوع دلخواه انتخاب نمود (اولين ركورد، آخرين ركورد، بسمت جلو، بسمت عقب...). سرويس دهنده برای هر يك از سطرهای موجود در شئ RecordSet پس از اجرای Query يك Bookmark، ايجاد می كند. اين Bookmark ها تا زمانيكه شئ Recordset حيات دارد تغيير نخواهند كرد بنابراين در صورتی كه يك ركورد جديد توسط كاربر ديگری در بانك اطلاعاتی در آن زمان درج گردد، آن رکورد جديد برای ما قابل رؤيت نخواهد بود.
• adOpenDynamic: يك Cursor پويا را برمی گرداند. اين نوع Cursor مشابه Keyset است با اين تفاوت كه امكان مشاهده ركوردهای جديد نيز وجود خواهد داشت. يك Cursor پويا بصورت پيوسته ركوردهای جديد و يا تغيير يافته را بررسی و حاصل را در شی RecordSet بصورت پويا منعكس خواهد كرد.
• adOpenStatic: يك Cursor ايستا بهمراه تعداد ثابتی از ركوردها را برمی گرداند. در چنين حالتی تغييرات و درج ركوردهای جديد در بانك در همان لحظه مشاهده نخواهد شد مگر اينكه مجددا درخواست بازيابی اطلاعات از بانك صادر شود.

پارامتر LockType، به ADO خواهد گفت كه چگونه با مسئله Lock در بانك اطلاعاتی رفتار نمايد. در حالت كلی می بايست برای اعمال تغييرات و يا درج ركوردهای جديد، پيش بينی های لازم را انجام داد. چراكه Lock ايجاد شده توسط يك كاربر می تواند باعث بروز مسائلی برای ساير كاربران گردد. مقدار اين پارامتر مطابق زير خواهد بود:

• adLockReadOnly: فقط خواندنی، امكان تغيير داده ها وجود نخواهد داشت.
• adLockPessimistic: قويترين نوع Lock است. ركوردهائی كه بدين صورت Lock خواهند شد توسط ساير كاربران قابل دستيابی نخواهند بود. ركوردها زمانيكه سرويس دهنده آنها را برمی گرداند Lock شده و تا زمانيكه شئ RecordSet وجود دارد، امكان استفاده از اين ركوردها برای سايرين وجود نخواهد داشت.
• adLockoptimistic: اين نوع Lock صرفا در زمان بهنگام سازی يك ركورد اعمال شده و بلافاصله ركورد از حالت Lock آزاد می گردد. بنابراين در مراحلی كه لازم است يك ركورد تغيير يابد می توان از اين نوع Lock استفاده كرد. و پس از اعمال تغييرات بصورت اتوماتيك، Lock آزاد خواهد شد.
• AdLockBatchOptimistic: اين نوع Lock مشابه Optimistic است با اين تفاوت كه آنها برای بهنگام سازی Batch مورد استفاده قرار می گيرند. در اين حالت مجموعه ای از ركوردها در يك مقطع زمانی بهنگام سازی خواهند شد ( بجای اينكه هر كورد بهنگام سازی گردد ). با توجه به نوع نرم افزار طراحی شده و ميزان محاوره ای بودن آن، می توان تصميم به استفاده از اين نوع Lock و يا Optimistic نمود.

آخرين پارامتر متد Recordset.Open، پارامتراختياری flag است. كه نوع Query را مشخص خواهد كرد ( Table,View,Stored Procedure ).

متد Move
پس از باز نمودن يك شئ RecordSet، با استفاده ازمتد Move، می توان در طول سطرهای موجود در شئ RecordSet با توجه به نوع cursor حركت كرد. شئ RecordSet دارای يك صفت با نام RecordCount بوده كه تعداد ركوردهای موجود در شئ RecordSet را مشخص می كند. تصور كنيد كه شئ RecordSet نظير يك جدول است با يك سطر خالی در ابتدا و يك سطر خالی در انتهای آن و اشاره گر ی كه در هر لحظه به يك ركورد اشاره می كند. در واقع با استفاده از متد Move، موقعيت اشاره گر فوق تغيير خواهد كرد ( اشاره گر حركت خواهد كرد) . شئ RecordSet دارای دو متد ديگر با نام EOF و BOF است كه زمان حضور اشاره گر در ابتدا و يا انتهای ركوردها را مشخص خواهند كرد. اين دو متد از نوع Boolean ( درست / نادرست ) هستند.

While NOT RecordSet.EOF
'Do something
RecordSet.MoveNext
Wend

متدهای Sort و Search
با استفاده از متدهای شئ RecordSet، می توان عمليات مرتب سازی (Sort) و جستجو (Search) را انجام داد. برای مرتب سازی يك مجموعه از ركوردها نام فيلد مورد نظری را كه می خواهيم مرتب سازی بر اساس آن انجام شود را به صفت Sort نسبت خواهيم داد. مثلا اگر بخواهيم مجموعه ای از ركوردها را كه توسط اجرای SELECT * FROM PhoneBook برگردانده شده است را براساس نام خانوادگی (LastName) مرتب نمائيم، می توان دستور RecordSet.Sort = "LastName" را استفاده كرد. برای مرتب سازی ركوردها براساس بيش از يك فيلد بصورت RecordSet.Sort = "LastName, FirstName" عمل می نمائيم. برای مرتب سازی ركوردها بصورت صعودی ( پيش فرض است )، يا نزولی بصورت RecordSet.Sort = "LastName, FirstName DESC" عمل می کنيم.

برای جستجوی يك ركورد بخصوص در بين مجموعه ركوردهای برگردانده شده از متد Find شئ RecordSet استفاده می گردد. شرط جستجو را بصورتی كه در يك SQL Where است، مشخص خواهيم كرد و پس از اجرای متد Find، شئ RecordSet به اولين موردی كه پيدا كرده است اشاره خواهد كرد و در صورتيكه ركوردی پيدا نشود،EOF ارزش درست را پيدا خواهد كرد. متد Find بغير از شرطی كه نظير SQL WHERE برای آن مشخص می كنيم، می تواند دارای سه پارامتر اختياری ديگر باشد:

• SkipRecords: تعداد ركوردهائی را كه می بايست قبل از عمليات جستجو، صرفنظر (Skip) نمايد، مشخص خواهد كرد.
• SearchDirection: جهت حركت جستجو در مجموعه ركوردها را مشخص خواهد كرد. adSearchForward ( بسمت جلو) ويا adSearchBackward( از آخر بسمت اول )
• Start: تعداد ركوردهائی را كه می بايست برای جستجو شروع كرد مشخص می كند.

شئ Field
با اينكه تاكنون ما به شئ RecordSet بصورت يك جدول نگاه می كرديم، اما اين صرفا يك مدل فرضی برای راحتی تصور آن است. شئ RecordSet در حقيقت شامل يك بردار دو بعدی از شئ Field است. شئ Field شامل داده است. بنابراين هر شئ از اين نوع دارای يك اندازه، يك مقدار و يك نوع بخصوص است. شئ فوق همچنين دارای مجموعه ای از صفات است. در اكثر موارد شايد نيازی نباشد كه با صفات و متدهای شئ فوق مستقيما كار كنيم، اما مطالعه آنها برای موارد پيش بينی شده در طراحی صفحات ASP كه قصد ارتباط با بانك های اطلاعاتی از طريق ADO را دارند، توصيه می گردد.
 
بالا