قبل از هر چیز یه نگاه کوتاه و جزئی بر تاریخچه php می کنیم. نویسنده php اولین بار این زبان رو برای کار های شخصی خودش و اثری برای Resume کاریش که باید تحویل می داده نوشته بوده. اولین بار این زبان بصورت یک CGI در زبان Perl نوشته شده بود. ولی سروری که روش php نصب شده بود یکسری مشکل در اجرای صفحات داشت. به همین دلیل php رو دوباره بازنویسی کرد و با زبان C نوشت. در همین اثنا بعضی از کاربران سرور مربوطه هم شروع به کار با نسخه نوشته شده و درخواست به افزودن feature های بیشتر کردند. این روال ادامه پیدا کرد تا اولین نسخه جمع و جور شده php رو همراه با راهنما، Mailing-List و FAQ بیرون داد. اولین نام این زبان Personal Home Page Tools بوده که در آینده به Personal Home Page Construction Kit تغییر کرد. در همین مدت که داشت php پامی گرفت نویسنده اون شروع به نوشتن یه CGI دیگه برای کارکردن با بانک های اطلاعاتی و ارسال SQL Query کرد. خوب بقیه تارخچه باشه برای بعد حالا به خود php بپردازیم ;-).
قبل از هرچیز پیشنهاد می کنم ادیتور یا بهتر بگم IDE پرقدرت Zend رو دریافت کنید. واقعا کارتون رو در کد نویسی راحت میکنه و همون جا هم می تونید اجراش کنید.
خوب تا الان نصب php رو گفتیم و گفتیم که 2 جور php رو میشه نصب کرد. یکی بصورت CGI و دیگری بصورت یک Module برای سرورتون. مطلبی که جاش بود ذکر کنم یه توضیح کوچکی برای فرق این دو بود.زمانی که php بصورت یک CGI برروی سرور نصب میشه، هرگاه که سرور به فایل های php بر می خوره php رو اجرا میکنه و این فایل رو بهش ارسال میکنه. ولی وقتی بصورت Module برای سرور نصب میشه، php جزئی از خود سرور میشه و زمانی که سرور شروع به کار میکنه همیشه هست و منتظر صفحات و اجراشون هست. طبیعتا معلومه که نصب بصورت Module بهتر از نصب بصورت CGI هست. چون اگر بصورت CGI نصب بشه با هر Request باید php اجرا بشه و بعد هم بسته بشه! البته وقتی php بصورت Module نصب میشه به این معنی نیست که از CGI دیگه نشه استفاده کرد. یه موقع ها میشه که ما لازم داریم بصورت CGI از php استفاده کنیم. به عنوان مثال می خواهیم سرور ما هر هفته توسط یکی از اسکریپت های نوشته شده ما از Database ما یک Backup بگیره. برای انجام این منظور ما اسکریپت رو بصورت جداگانه و CGI اجراش می کنیم. خیلی حاشیه رفتم، حالا بیایم سر اصل مطلب.
اسکریپت های نوشته شده php همگی باید در فایل های متنی ساده ویا به عبارتی بهتر بصورت UNIX-Style نوشته شوند. به عنوان مثال یک فایل php هیچ وقت نباید با Word Pad یا MS-Word ساخته شود! چون موقع اجرا php رو دچار مشکل میکنه. در محیط Windows ساده ترین ادیتور برای انجام اینکار Note-Pad هست. اگر از ویندوز 2000 یا XP استفاده می کنید که چه بهتر چون می تونید به راحتی یک فایل php و با کدپیج Unicode ذخیره کنید. فایل های php معمولا از پسوند php. تشکیل می شوند. زمانی که browser شما یک درخواست به سرور شما میفرستد برای مشاهده یک فایل php، سرور شما فایل مربوطه رو به php Engine میفرسته تا فایل اجرا بشه. کار php Engine اجرای فایل php شما و ارسال نتیجه بصورت HTML به browser شما هست. php یک زبان اسکریپت نویسی سمت سرور است. یعنی اسکریپت شما در سرور اجرا شده و نتیجه برای شما ارسال می شود.
دستورات php رو میشه به طرق مختلف نوشت. در اینجا به چند صورتش اشاره می کنم.
من توی نوشته هام فقط بصورت XML می نویسم. مابین این تگ ها هر چند تا دستور که بخواهیم می تونیم بنویسیم. هر دستوری که تموم میشه باید بعدش این علامت رو بزاریم ";" هرگاه Engine زبان php به این ویرگول نقطه دار رسید فرض میکنه که دستور شما تموم شده. اگر در آخر هر دستور خود اینو نزارید برنامتون با مشکل برمیخوره. در اینجا یک مثال می زنم که نمایانگر پایان یک دستور هست.
این عبارت دقیقا مساوی این عبارت هست:
php تا زمانی که به ";" نرسه دستور رو تموم شده فرض نمیکنه. هردوی این عبارات حاصل ضرب 14 در 5 رو برروی صفحه نشون می دهند.
گاهی اوقات میشه که ما می خواهیم خطی یا خطوطی رو در فایل php خود غیر فعال کنیم تا اجرا نشن. یا گاهی اوقات هست که ما می خواهیم در کد های خود مطلبی رو بنویسیم. مثلا می خواهیم بگیم این کد فلان کار رو انجام میده. این کار رو می توان به 3 صورت انجام داد. راحت ترین راه برای انجام این کار گذاشتن 2 تا slash " //" در آغاز هر خط است. به عنوان مثال ما می خواهیم یه نوشته روی صفحه نمایش بدیم و در خود کد هم می خواهیم توضیح بدیم که این چیه:
اگر // رو در اول خط میزاشتیم، این دستور دیگه اجرا نمیشد و به اصطلاح Ignore میشد. به جای // می توان از # هم استفاده کرد. ولی گاهی اوقات هست که شما می خواهید چند خط رو غیر فعال کنید. برای انجام این کار نوشته هارو داخل /* ...*/ قرار می دهیم. به عنوان مثال هر اسکریپتی که نوشته میشه، در آغاز فایل یه توضیح کوتاهی از اسکریپت نوشته شده، می نویسند.
به همین روال اگر شما یکسری کد جای این نوشته ها قرار بدید، کد های شما Igone میشن و اجرا نمیشن.
خوب حالا بپردازیم به نحوه نمایش عبارات برروی صفحه! نوشته های متنی و عبارات متنی رو میشه به 3 مدل نوشت و نمایش داد. نحوه اول بصورت double quote هست. اگر شما نوشته های خود رو درون "..." قرار بدهید، زمان اجرا، php متن شمارو تا تگ های HTML و متغیر های استفاده شما رو پیدا کنه و نتیجه رو برروی صفحه نشون بده. در زبان php نوشته های ما توسط دستور echo نمایش داده می شوند. به این مثال برای نمایش متن هایی که درون double quote هستند دقت کنید.
در این مثال چون کلمه salam بین تگ های هست بصورت bold یا توپور نمایش داده میشه. بنابراین نتیجه salam می باشد. در ادمه نوشته می بینید که اگر یک متغیر هم نامش دورن "..." قرار داده شده باشده، مقدار یا ارزش اون در صفحه نشون داده میشه.
نحوه بعدی نمایش عبارات، بصورت single quote هست. یعنی نوشته های ما میان '...' قرار می گیرند. وقتی نوشته های شما میان '...' قرار بگیرند، دیگه توسط php مورد بررسی قرار داده نمیشه که آیا متغیری میانشون هست یا نه:
حاصل این دستور عبارت salam درست مانند قبلی برروی صفحه است. ولی اگر ما متغیری در این نوشته قرار بدیم، مقدار و ارزشش نشون داده نمیشه و فقط اسمش نشون داده میشه. آخرین روش برای نمایش عبارات استفاده از Here Document است که من تا حالا زیاد ندیدم جایی استفاده داشته باشه. در این روش هم اگر شما از دستورات html استفاده کنید، نوشته های شما برروی صفحه به همان صورت نشون داده می شوند. به عنوان مثال:
در متغیر hereTex$ ما این نوشته هارو ذخیره می کنیم. هنگام نمایش برروی صفحه ما این نتایج رو میگیریم:
کلا زیاد از Here Document استفاده نمیشه. اعداد رو هم میشه بصورت عددی که هستند نمایش بدیم و هم بصورت مقادیر آن ها در سیستم های Octal و Hexa. به عنوان مثال این عبارات همگی عدد 110 رو نشون می دهند:
برای نمایش اعداد Hexadecimal باید در شروع آن 0x و برای نمایش اعداد Octal باید درشورع آنها یک صفر قرار دهیم.
نمی دونم تاحالا برنامه نویسی کارکردید یا نه! در برنامه نویسی ما همیشه با مقداری به نام بولین (Boolean) سروکار داریم. متغیری که از نوع بولین تعریف میشه یا مقدار True میگیره یا False. میشه اینو به یه چراغ تشبیه کرد. یه چراغ یا خاموشه یا روشن. وقتی روشنه True هست وقتی هم که خاموش هست False.
php
هم مانند تمامی زبان های برنامه نویسی دیگه از انواع مختلف متغیر ها پشتیبانی می کنه. در این زبان متغیر ها با علامت $ نامشون شروع میشه. به عنوان مثال اگر ما بخواهیم متغیری داشته باشیم که درونش نامی رو نگهداری کنیم می تونیم name$ تعریفش کنیم. php نسبت به نام متغیر ها Case Sensitive هست. یعنی متغیر m4s$ و M4s$ و M4S$ هر 3 با همدیگه فرق می کنند. پس توی نامگذاری همیشه دقت کنید. در php نیاز نیست که حتما یه متغیر رو قبل از اینکه استفادش کنیم تعریفش کنیم و نوعش رو مشخص کنیم. دربعضی از زبان های برنامه نویسی برای استفاده از یک متغیر حتما باید تعریفش کنیم. زمانی که یه متغیر مقداری رو میگیره همون موقع درست میشه و تازمانی که برنامه هنگام کارکردن هست وجود داره. برای مقدار دهی به متغیر ها مانند خیلی از زبان های برنامه نویسی عمل می کنیم:
برای نمایش یک متغیر برروی صفحه می توان از دستور echo استفاده کرد. به عنوان مثال می خواهیم متغیر WebSiteName$ رو بروی صفحه بصورت Bold نشون بدیم. برای انجام این کار از این دستور استفاده می کنیم:
نتیجه این دستور عبارت Welcome to M4S.Net می باشد. اگر شما این عبارات رو در Single Quote قرار می دادید عبارت Welcome to $WebSiteName برروی صفحه نمایش داده میشد!
گاهی اوقات میشه که ما می خواهیم مقدار ثابت (Constant) تعریف کنیم و در برنامه ازش استفاده کنیم. درست مانند کاری که phpNuke برای فایل های زبان کرده. مقادیر ثابت درطول برنامه نه عوض میشن و نه مقداری می گیرند. نحوه تعریف مقادیر ثابت اینگونه است:
این دستور 3 تا پارامتر میگیره، ولی معمولا 2 تاش برای تعریف مقادیر ثابت لازم است. پارامتر اول نام مقدار ثابت و پارامتر دوم مقداری هست که ما می خواهیم بهش بدهیم. پارامتر سوم از نوع بولین و دلخواه است که برای تعیین Case In-Sensitive بودن مقدار ثابت ما هست. اگر مقدار True بدیم دیگه مقدار ثابت ما Case Sensitive نیست. به مثال زیر توجه کنید:
در این مثال چون ما تعیین کردیم که مقدار ثابت ما Case In-Sensitive هست می تونیم مثل تمامی موارد فوق بخونیمش. مقدار پیشفرض پارامتر سوم همیشه False هست. بنابر این اگر شما True رو مشخص نکنید مقدار ثابت شما Case Sensitive تعریف میشه. و اگر دقیقا عین نامش رو ننویسید مقدار اون نشان داده نمیشه.
همچنین تابعی هست به نام defined اینو از عمد اینجوری نوشتم که با خود define اشتباه نشه. این تابع مشخص میکنه که آیا مقدار ثابتی تعریف شده یا نه. اگر تعریف شده بود مقدار True بر میگردونه، اگر تعریف نشده بود، مقدار False بر میگردونه. True همیشه 1 است و False همیشه 0. به این مثال توجه کنید.
نتیجه ای که برروی صفحه نمایش داده میشه 1 است. چون ما گفتیم که WebSiteName یک مقدارثابت (Constant) هست که Case Sensitive نیست. بنابر این، با نام websitename هم برای سیستم تعریف شده است. ولی اگر ما اون مقدار true رو برداریم. حاصلی که می بینیم 0 است. چون این بار WebSiteName بصورت Case Sensitive تعریف شده و تا همانند نامش صداش نکنیم جواب نمیده :-) (دیگه کامپیوتر هم برا آدم کلاس میزاره).
php
شکر خدا مثل بعضی زبون های برنامه نویسی درگیری نداره به آدم هم گیر نمیده و با متغیر ها خیلی flexible رفتار می کنه. در php میشه از این 8 نوع متغیر استفاده کرد:در زبان
php از متغیر های double به عنوان همون floating-point استفاده میشه. برای اینکه بینید متغیر های شما از چه نوع هستند می تونید از تابع ()gettype استفاده کنید مثال زیر یه مثال خوبی برای نشون دادن نوع متغیر ها هست:
نتیجه ای که برروی صفحه نشون داده میشه این هست:
اینجا یه نکته هست. اگر ما عدد 18 رو داخل "..." قرار دهیم، php متغیر age$ رو به عنوان یک متغیر string حساب می کنه. اگر بخواهیم نوع متغیری را تغییر دهیم از تابع ()settype استفاده می کنیم. به عنوان مثال این مرتبه عدد 18 رو در "..." قرار می دهم و توسط تابع ()settype میعن می کنیم که این متغیر یک integer هست.
اگر ما از تابع ()settype استفاده نمی کردیم php متغیر age$ رو یک string حساب می کرد، ولی حالا به عنوان یک integer حساب می کنه.
همچنان در php می توان از عملگر های Casting هم استفاده کرد. درست مانند توابع ()int و ()str در زبان های برنامه نویسی دیگه مانند VB و ++C. توسط عملگرهای Casting می توانید بصورت موفقت نوع متغیر رو تغییر داد. فهرست زیر، لیست عملگرهای Casting زبان php می باشد:
(string)
(integer)
(double)
(boolean)
البته میشه از نام اختصاری (int) و (bool) برای عملگر های (integer) و (boolean) استفاده کرد. طریقه استفاده از این عملگر های اینگونه می باشد:
به عنوان مثال ما متغیری داریم که توش عدد Π رو ذخیره کرده ایم. ولی وضعیتی در برناممون پیش اومده که می خواهیم این متغیر رو به عنوان یک عدد صحیح (integer) برروی صفحه نمایش دهیم. بنابر این اینگونه برروی صفحه نمایش می دهیم:
بصورت پیشفرض php متغیر pie$ رو به عنوان یک متغیر double حساب میکنه. ولی ما با دستور (int)($pie) مقدار این متغیر رو به عنوان یک عدد صحیح نشون میده بنابر این خروجی برنامه عدد 3 هست.
در php عملگر های دیگه هم هستند. بعضی عملگر ها در php باید بین 2 عبارت عملی انجام دهند و بعضی عملگرها هم در php وضیفه انجام عملی برروی یک عبارت دارند. به عنوان مثال عملگر های جمع (+) و یا تفریق (-) برروی 2 عبارت باید عملی انجام دهند. مثال عملگر هایی که برروی یک عبارت عمل می کنند، عملگر Casting یا عملگر Increment (++) می باشد. در ادامه متن بیشتر بهشون توضیح می دهم.
در php عملگر های ریاضی مانند عملگر ها در همه زبان ها می باشد. همچنین عملگر دیگه ای هم هست در php که ترجمش میشه "عملگر 3 گانه" (Ternary Operator) که در بخش های بعدی هنگام معرفی دستورات شرطی مثل If و Switch بهش می پردازیم.
اسم Program
; تعریف ثابت const
; تعریف نوع type
; تعریف متغیرها var
)پارامترها ) نام procedure
begin
____
____
____
end ;
; ( پارامترها ) نام نوع تابع function
begin
____
____
____
end ;
begin
____
____
____
end .
REG_DWORD ، REG_SZ ، REG_EXPAND_SZ ، REG_BINARY ،
REG_MULTI_SZ ، REG_FULL_RESOURCE_DESCRIPTOT
Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003
Global Const ERROR_NONE = 0
Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259
Global Const KEY_ALL_ACCESS = &H3F
Global Const REG_OPTION_NON_VOLATILE = 0
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ ' type of value is string
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))x
Case REG_DWORD ' type of value is Double word
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)x
End Select
End Function
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)x
Select Case lType
' For strings
Case REG_SZ:
sValue = String(cch, 0)x
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)x
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)x
Else
vValue = Empty
End If
' For DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)x
If lrc = ERROR_NONE Then vValue = lValue
Case Else
'all other data types not supported
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)x
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)x
DeleteKey = lRetVal ' return function value
End Function
Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = RegDeleteValue(hKey, sValueName)x
RegCloseKey (hKey)x
DeleteValue = lRetVal
End Function
Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)x
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)x
RegCloseKey (hNewKey)x
CreateNewKey = lRetVal
End Function
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)x
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)x
RegCloseKey (hKey)x
SetKeyValue = lRetVal
End Function
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = QueryValueEx(hKey, sValueName, vValue)x
QueryValue = vValue
RegCloseKey (hKey)x
End Function
Public Sub CreateAssociation(sExtension As String, sApplication As String, sAppPath As String)x
Dim sPath, sAppExe As String
CreateNewKey "." & sExtension, HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, "." & sExtension, "", sApplication & ".Document", REG_SZ
CreateNewKey sApplication & ".Documentshellopencommand", HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, sApplication & ".Document", "", sApplication & " Document", REG_SZ
sPath = sAppPath & " %1"x
sAppExe = sApplication & ".exe"x
SetKeyValue HKEY_CLASSES_ROOT, sApplication& ".Documentshellopencommand", "", sPath, REG_SZ
CreateNewKey "SoftwareMicrosoftWindowsCurrentVersionExplorerFileExts." & sExtension, HKEY_CURRENT_USER
SetKeyValue HKEY_CURRENT_USER, "SoftwareMicrosoftWindowsCurrentVersionExplorerFileExts." & sExtension, "Application", sAppExe, REG_SZ
CreateNewKey "Applications" & sAppExe & "shellopencommand", HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, "Applications" & sAppExe & "shellopencommand", "", sPath, REG_SZ
End Sub
CreateAssociation("xxx","MyApp","c:MyApp.exe")x
HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWAREMicrosoftWindowsCurrentVersionRun", "MyApp", "C:MyApp.exe", REG_SZ
#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}
تابع مفید دیگری برای کار با ماوس تابع 02 از وقفه 33hex میباشد. این تابع نشانگر ماوس را پنهان می کند. فرض کنید می خواهید مانند برنامه Paint وقتی ماوس را میکشید یک خط هم با آن کشیده شود. در این حالت اگر نشانگر ماوس دیده شود بعضی از نقاط خط پاک خواهند شد و بهتر است که در این مواقع نشانگر را پنهان کنیم. بعدا مثال کاملتری برایتان خواهم نوشت. برای کار با ماوس ما باید بدانیم که نشانگر اکنون د رکجای صفحه می باشد یعنی مختصات (x,y) آن را بدست آوریم. برای این کار از تابع شماره 03 استفاده می کنیم. که پس از فراخوانی تابع ثبات CX حاوی مختصات افقی(x) و DX حاوی مختصات عمودی نشانگر خواهد بود. کار مهم دیگر تشخیص کلیدهای فشرده شده ماوس است. تابع 03 همچنین تعیین می کند که کدام کلید از ماوس فشرده شده است. این کلیدها را ثبات BX تعیین میکند. فقط همین کافی است که بدانید پس از فراخوانی وقفه اگر BX برابر با 00000001)Hex (باشد کلید چپ ماوس فشار داده شده است. راجع به فشار دادن کلیدهای دیگر اگر علاقه مند بودید به من ایمیل بزنید تا نحوه تشخیص آنها را هم بنویسم. مثال زیر نحوه کار را مشخص می کند:< /P>< /P>
#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d)
y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}
برای پایان کار می خواهیم یک برنامه که ابزار pencil برنامه های گرافیکی را شبیه سازی می کند بنویسیم. برای این کار ما ابتداصفحه را درحالت گرافیکی قرار می دهیم برای این کهبرنامه زیر کار کند در دستور initgraph(&gd,&gm,""); در داخل کوتیشن مسیرفایلهای .bgi را بنویسید.
#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}
لطفا اگر علاقه مند بودید که بیشتر راجع به ماوس بدانید و یا اگر سوالی داشتید با من تماس بگیرید.
#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}
تابع مفید دیگری برای کار با ماوس تابع 02 از وقفه 33hex میباشد. این تابع نشانگر ماوس را پنهان می کند. فرض کنید می خواهید مانند برنامه Paint وقتی ماوس را میکشید یک خط هم با آن کشیده شود. در این حالت اگر نشانگر ماوس دیده شود بعضی از نقاط خط پاک خواهند شد و بهتر است که در این مواقع نشانگر را پنهان کنیم. بعدا مثال کاملتری برایتان خواهم نوشت. برای کار با ماوس ما باید بدانیم که نشانگر اکنون د رکجای صفحه می باشد یعنی مختصات (x,y) آن را بدست آوریم. برای این کار از تابع شماره 03 استفاده می کنیم. که پس از فراخوانی تابع ثبات CX حاوی مختصات افقی(x) و DX حاوی مختصات عمودی نشانگر خواهد بود. کار مهم دیگر تشخیص کلیدهای فشرده شده ماوس است. تابع 03 همچنین تعیین می کند که کدام کلید از ماوس فشرده شده است. این کلیدها را ثبات BX تعیین میکند. فقط همین کافی است که بدانید پس از فراخوانی وقفه اگر BX برابر با 00000001)Hex (باشد کلید چپ ماوس فشار داده شده است. راجع به فشار دادن کلیدهای دیگر اگر علاقه مند بودید به من ایمیل بزنید تا نحوه تشخیص آنها را هم بنویسم. مثال زیر نحوه کار را مشخص می کند:< /P>< /P>
#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d)
y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}
برای پایان کار می خواهیم یک برنامه که ابزار pencil برنامه های گرافیکی را شبیه سازی می کند بنویسیم. برای این کار ما ابتداصفحه را درحالت گرافیکی قرار می دهیم برای این کهبرنامه زیر کار کند در دستور initgraph(&gd,&gm,""); در داخل کوتیشن مسیرفایلهای .bgi را بنویسید.
#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}
لطفا اگر علاقه مند بودید که بیشتر راجع به ماوس بدانید و یا اگر سوالی داشتید با من تماس بگیرید.
در این مقاله شما در مورد کار با با پایگاه داده در ASP.NET آشنا خواهید شد. بدین معنا که در صدد هستیم تا رویه ای کلی از مفاهیم، روشها وابزارهای مورد استفاده در ASP.NET جهت برقراری ارتباط با پایگاه داده، نشان دادن داده ها، دستکاری داده ها، بهنگام سازی و... توسط اشیایی چون مهیا کننده های بانک های اطلاعاتی، DataSetها XML، و ... معرفی می شود.
اگر تا بحال با پایگاه داده کار نکرده اید شاید provider یک پایگاه داده برای شما نامفهوم باشـد. بطور خلاصه راهی را که باید طی کرد تا به پایگاه داده متصل شده، آنرا باز کرده و داده ها را دستکاری کرده و دستورات را اجرا نمود، بوسیله یک تهیه کننده اطلاعات مشخص می شود. در ASP.NET معمولا از دو روش برای این کار استفاده می شود. روش اول اینکه اگر پایگاه داده شما از نوع SQL Server باشد بایستی با مدل SQLClient کار کرد و اگر پایگاه داده شما غیر از SQL Server باشد (در حال حاضر) باید از روش دیگر یعنی مدل OleDb استفاده نمود. بعنوان مثال اگر پایگاه داده شما Oracle ،Sybase و یا Access باشد باید از روش OleDb استفاده کنید.
روش کار بدین صورت است که ابتدا بایستی فضانام زیر را در صفحاتی که از بانک اطلاعاتی استفاده می شود فراخوانی کرد:
<% @ Import NameSpace="System.Data" %>
<% @ Import NameSpace="System.Data.OleDb" %>
برای برقراری ارتباط با پایگاه معمولا از عبارت زیر استفاده می شود:
Dim ObjConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DataSource=e:dbusers.mdb”)
که قسمت DataSource آدرس فایل پایگاه داده است که در اینجا یک بانک Access است. همانگونه که ملاحظه می کنید از رشته ارتباطی یا Connection String بعنوان پارامتر استفاده شده است و بوسیله متد Open ارتباط باز می شود:
objConn.Open()
لازم به توضیح است که در پایان کار بوسیله متد Close ارتباط را خاتمه می دهیم.
بمحض ارتباط با پایگاه داده می توان دستورات را به آن فرستاد. این کار معمولا بوسیله شی OleDbCommand انجام می شود. جهت انجام این کار می توان یک دستور SQL یا نام یک روال ذخیره شده (Stored Procedure) را مشخص نمود و بنا به مقتضیات می توان اعمال مختلفی را روی پایگاه پیاده نمود:
Dim objCommand As New OleDbCommand ( "Select * From users", objConn )
ملاحظه می کنید که کلاس Command از دو پارامتر رشته SQL و نام رشته ارتباطی برای فرستادن دستورات به پایگاه داده استفاده می کند. برای مثال آنچه را که در عبارت فوق دیدید می توان به بخشهای کوچکتر زیر تقسیم کرد.
ابتدا تعریف شی:
Dim objCommand As New OleDbCommand()
سپس نسبت دادن آن به رشته ارتباطی جهت برقراری ارتباط پایگاه:
objCommand.Connection= objConn
مشخص کردن عملیات مورد نظر بوسیله دستورات SQL:
objCommand.CommandText="Select * From Users"
حتی می توانید عملیات فوق را بصورت ذیل انجام دهید:
Dim objCommand As New OleDbCommand( SQL string, Connection string )
روشهای فوق دقیقا یک کار مشابه را انجام می دهند با این اوصاف که در عبارت آخر بجای شئ ارتباطی از یک رشته ارتباطی استفاده شده است. تا این مرحله هنوز عبارات فوق را به اجرا در نیاورده ایم. برای این کار راه های متفاوتی وجود دارد:
- از ExecuteNonQuery زمانی استفاده می شود که قصد برگرداندن داده ها از پایگاه مورد نظر نباشد مثلا در مواقعی که از دستورات SQL جهت درج (Insert) و بهنگام سازی (Update) استفاده شود.
objCommand.ExecuteNonQuery
- از ExecuteReader برای خواندن و برگرداندن اطلاعات از پایگاه استفاده می کنیم.
Dim ObjRead As OleDbDataReader
objRead=objCommand.ExecuteReader
- برای دستکاری یک تک مقدار مشخص و مورد نظر از متد ExecuteScalar استفاده می شود.
برای خواندن داده ها معمولا از کلاس DataReader استفاده می شود -برای خواندن نه برای اضافه کردن یا بروز کردن- این شئ بصورت مستقیم به پایگاه داده دسترسی دارد و فقط خواندنی (Read Only) است. البته این خاصیت محدودیتی برای آن است اما برای خواندن ساده داده روشی کامل بشمار می رود.
Dim objReadaer As OleDbDataReader
objReader=objCommand.ExecuteReader
Whlie objReader.Read
Response.write(objReader.GetString(0)& " <br> " )
End While
عبارت فوق جهت نمایش و چاپ داده ها بکار می رود. متد Read خواندن را تا زمانیکه به پایان نتایج نرسد ادامه می دهد و عبارت objReader.GetString(0) برای برگرداندن نسخه رشته ای ستونهای رکورد کاربرد دارد. در لیست زیر چند متد دیگر برای برگرداندن مقادیر داده ای متغیرها آمده است:
GetBoolean(x) مقدار منطقی را بر می گرداند.
GetChar(x) مقدار کاراکتری را برمی گرداند.
Get DataTypeColumn(x) نوع داده را در ستون برمیگرداند.
GetString(x) مقداررشته ای را برمی گرداند.
در این بخش شما به دانسته های بخش اول نیاز دارید. شئ بعدی که مورد بحث قرار می گیرد کلاس Data Adapter است. OleDBDataAdapter اطلاعات را می گیرد و یک ارتباط منطقی بین داده ها و کلاس Dataset ایجاد میکند. بطور کلی میتوان گفت Data Adapter در نظر اول معادل Data Command می باشد. روش استفاده از Data Adapter ها بطور معمول بصورت زیر تعریف می شود:
Dim objAdapter As New OleDBDataAdapter("Select * From Users",objConn)
ملاحظه می کنید که شئ Adapter از دو پارامتر- یکی رشته دستورات SQL و دیگری رشته ارتباطی - برای فرستادن دستورات به پایگاه داده استفاده می کند. بطور معمول DataAdapter برای پرکردن DataSetها و بروز کردن پایگاه بوسیله یک DataSet و اجرا کردن دستورات بکار می رود. اکنون نمای کلی از کاربرد فوق را در زیر می بینید:
Dim ds As DataSet = New DataSet()
objAdapter.Fill(ds,"Users")
متد Fill جهت اجرای دستور تنظیم شده در Data Adapter بکار می رود. بعبارت دیگر اطلاعات واکشی شده از پایگاه داده در یک جدول با نامی که ما تعیین می کنیم (Users) ذخیره می شود.
نکته ضروری اینست که تکنیک Mappings در اکثر مواقع کارساز است. Mappings عبارت است از ساختن یک نام مستعار (Alias) برای نام جداول در یک Dataset. این aliasها هیچگونه تاثیری در منبع داده ندارد و وقتی که بوسیله DataAdapter فرستاده می شود بصورت خودکار بنام پیش فرض تبدیل میشود. این تکنیک باعث خوانایی کد و راهنمایی برنامه نویس در ارجاع های بعدی وتشخیص جداول فراخوانی شده میشود.
objAdapter.TableMappings.Add("adbtable","Users")
with objAdapter.tableMapping(0).ColumnMappings
.Add("PID","ID"
.Add("LAstName","Lnam"(
.Add("StreetAddress","Addy"(
End with
objAdapter.Fill(ds
در تکنیک فوق بجای استفاده از عبارت ds.Tables("adbtable") میتوانیم Ds.Tables("Users") را بکار ببریم. در بخشهای آینده دیگر فواید استفاده از Mappings آمده است. همچنین کلاس CommandBuilder برای بهنگام کردن یک بانک که بوسیله Dataset صورت گرفته یک شیوه صحیح بشمار میرود:
Dim cmdBLD As New OleDBCommandBuilder(objAdapter)
که در عبارت فوق شئ objAdapter بعنوان پارامتر به دستور CommandBuilder فرستاده شده و سپس بوسیله متد Update منبع داده بهنگام می شود:
objAdapter.Update(ds,"Users")
در ادامه، مثال زیر بعنوان جمع بندی مطالب قبلی آمده است. توجه داشته باشید در مثال زیر نتیجه ای بعنوان خروجی در مرورگر نمایش داده نمی شود و فقط از منبع داده ای اطلاعات خوانده شده و یک شئ Dataset پر می شود
<%@ Import NameSpace="System.data" %>
<%@ Import NameSpace="System.Data.OleDB" %>
<Script Language="VB" Runat="Server">
Sub Page_Load( Sender As Object, E As EventArgs)
Dim objConn As New OleDBConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:dbusers.mdb")
objConn.Open()
Dim ds As DataSet=New DataSet
Dim objAdapter As New OleDBDataAdapter("Select * From Users",objConn)
Dim objcmdBLD As New OleDBCommandBuilder(objAdapter)
Obj.Adapter.Fill(ds,"Users")
End Sub
</Script>
شرکت مایکروسافت در ویژوال بیسیک ورژن 3 که در سال 1993 ارائه داد از Jet که هسته اصلی MS Access بود برای ایجاد ارتباط با بانکهای اطلاعاتی استفاده نمود البته برای استفاده بهتر برنامه نویسان ، Jet را در غالب مجموعه Object هائی تحت عنوان (Data Access Object ) آورد. در نسخه 4 و 5 ویژوال بیسک ، ماکروسافت روشی دیگر برای ارتباط با بانکهای اطلاعاتی تحت عنوان Remote Data Object = RDO را مطرح ساخت این روش برای برنامه نویسی Client / Server روش مناسبی بود.
در دوم سپتامبر سال 1998 وقتی ماکروسافت ویژوال بیسیک ورژن 6 را ارائه داد روش جدیدی تحت عنوان ( Activex Data Object ) ADO را مطرح ساخت در این روش که پایه و اساس آن OLEDB بود ماکروسافت بر خلاف DAO و RDO که ساختاری پیچیده و سلسله مراتبی داشتند، از ساختاری ساده و مجزا ( غیر سلسله مراتبی ) استفاده کرد و در واقع ADO هم شامل Object هائی است که برنامه نویس بتواند از آنها برای ایجاد ارتباط با بانکهای اطلاعاتی و انجام عملیات روی آنها استفاده کند و در تاریخ 13 February سال 2002 که ماکروسافت نسخه نهائی Visual Basic.Net را ارائه داده روشی جدید برای کار با بانکهای اطلاعاتی تحت عنوان ADO.Net را آورده است. این نسخه از ویژوال بیسیک برخلاف نسخههای قبل بطور کامل مباحث OOP را پشتیبانی میکند ( FULL OOP ) در واقع ADO.Net هم مانند ADO و RDO و ADO شامل ساختاری برای ارتباط و انجام عملیات روی بانکهای اطلاعاتی است. ADO.net همانند RDO و DAO و برخلاف ADO دارای ساختار سلسله مراتبی میباشد. در این مقاله میخواهیم به مقایسه ADO و ADO.net بپردازیم. ADO در ورژنهای مختلفی در این چند سال اخیر به بازار آمده است با آمدن SQL Server 2000 ورژن جدید ADO یعنی ورژن 2.6 از این محصول ارائه شد و اکنون هم ADO 2.6 در سایت ماکروسافت قابل Download میباشد.
آخرین ورژن ADO شامل 9 تا Object است که عبارتند از :
Connection
Command
Recordset
Parameter
Field
Error
Property
Record
Stream
آبجکت Connection امکان ارتباط با Data Source که شامل بانک اطلاعاتی است را فراهم میسازد. بعنوان مثال اگر بخواهیم از آبجکت Recordset برای اضافه و یا حذف و یا تغییر در محتوای رکوردی استفاده کنیم این آبجکت از Connection برای ایجاد ارتباط با بانک اطلاعاتی مثلاً SQL Server استفاده میکند اما همانطور که گفته شد و در شکل ملاحظه میشود ساختار آبجکتهای ADO بصورت سلسله مراتبی نیست و میتوان مثلا Recordset ای ایجاد نمود که مستقل از آبجکت Connection بتواند با بانک اطلاعاتی ارتباط برقرار نماید.
در ADO علاوه بر آبجکتها، چهار Collection هم دیده میشود که عبارتند از :
Parameters
Fields
Properties
Errors
که هرکدام از آنها شامل آبجکتهائی از همان نوع هستند بعنوان مثال ساختاری که برای Recordset کشیده شده بیان کننده آن است که این آبجکت شامل Collection های Fields و Properties بوده و مثلاً Collection مربوط به Fields شامل آبجکتهای فیلد است.
آبجکت فیلد اطلاعاتی را راجع به یک ستون از Recordset در خود نگه داشته است.
در ADO آبجکت Command هم وجود دارد که از آن میتوان برای اجرای یک فرمان SQL استفاده نمود البته بهترین روش برای اجرای Stored Procedure نیز استفاده از متد Execute مربوط به همین آبجکت است .
بعنوان مثال :
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
cn.Open " Provider = sqloledb ; Data Source=serverName ; Initial Catalog = northwind ", "sa" , "password"
cmd.ActiveConnection = cn
cmd.CommandText = "sp_who"
cmd.CommandType = adCmdStoredProc
Set rs = cmd.Execute
Debug.Print rs(0)
rs.Close
از آبجکت Parameter هم برای مشخص کردن مقادیر پارامترهای ورودی یک Stored Procedure استفاده میکنیم.
آبجکت Property برای استفاده از Dynamic Property استفاده میشود که Property هایی هستند که وابسته به Provider بوده و استاندارد نیستند .
از Record برای دسترسی به یک سطر از Recordset و ویژگیهای مربوط به آن سطر استفاده میکنیم .و آبجکت Stream هم به منظور ذخیره و بازیابی اطلاعات بصورت باینری در یک فیلد از Record در نظر گرفته شده است.
تا اینجا باساختار ADO آشنا شدیم حال به تشریح ADO.net میپردازیم .
ADO.Net مجموعهای از Class های Interface ها و دستوراتی جهت مدیریت و کار با بانکهای اطلاعاتی است. در بحث Net . مجموعهای از Class های مربوط به هم در یک غالب تحت عنوان Name Space ارائه شده است Net. شامل تعدادی Name Space است که در غالب .Net Framework قرار دارد. تمام ساختار ADO.net در چهار NameSpace قرار دارد که عبارتند از :
System.Data.SqlClient.
System.Data.OleDb.
System.Data.Odbc.
System.Data.
اگر بخواهیم از بانکهای SQL Server استفاده کنیم System.Data.SqlClient بهترین انتخاب است در این NameSpace امکاناتی فراهم شده تا بتوانیم Application های بنوسیم و در آنها با SQL Server ارتباط برقرار نمائیم بطوریکه برنامهها از Performance بالائی برخوردار باشند.
در صورتی که کاربر بخواهد از بانکهای رابطه ای دیگر نظیر Oracle استفاده کند میتواند از System.Data.OleDb بهره گیرد.
System.Data.Odbc برای ارتباط با بانکهای اطلاعاتی از طریق ODBC میباشد System.Data هم شامل Provider های خاص نظیر DataSet و DataTable است. ADO.net نیز شامل Object ها و Collection هائی است که از مهمترین آنها میتوان موارد ذیل را شمرد:
OleDBConnection
OleDBCommand
OledbDataReader
OleDBDataAdapter
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
DataTable
DataRelation
OleDBConnection آبجکتی است شبیه به آبجکت Connection در ADO ، که امکان ایجاد ارتباط با بانک را فراهم میسازد این آبجکت متدهایی برای اجرای فرامین SQL نیز داراست .OleDBCommand هم مشابه آبجکت Command در ADO میباشد.
از این آبجکت نیز برای اجرای Stored Procedure و اجرای فرامین SQL استفاده میشود. آبجکت بعد OledbDataReader است که برای گرفتن اطلاعات از Database استفاده میشود. البته لازم به ذکر است Resultset ای که با این روش ساخته میشود بصورت ReadOnly و Forwardonly میباشد. OleDBDataAdapter آبجکت جدیدی در Ado.net است که خود شامل چهار آبجکت برای انجام فرامین SQL میباشد که عبارتند از :
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
که به ترتیب برای واکشی اطلاعات، اضافه نمودن اطلاعات جدید به داخل بانک ، به هنگام سازی اطلاعات و حذف اطلاعات استفاده میشود. این آبجکت به همراه آبجکت Dataset استفاده میشود و برای پرکردن Recordset موجود در Dataset بکار میرود.
آبجکت بعدی Dataset است که مهمترین آبجکت در Ado.net میباشد این آبجکت شامل دو Collection به نام های DataTables و DataRelations است. همانطور که میدانید در ADO هم آبجکت Recordset داشتیم اینجا مجموعهای از Recordset ها در داخل یک DataTables نگه داشته میشود و میتوان بین DataTable های مختلف رابطه نیز ایجاد نمود که این روابط هم داخل یک مجموعهای با نام DataRelations نگه داشته میشود. در واقع DataTable در ADO.net معادل همان RecordSet در ADO میباشد.
تعریف کلی از اکسسAccess
اکسس ابزاری برای تولید بانکهای اطلاعاتی رابطه ای است. بانکهای اطلاعاتی امکان گردآوری انواع اطلاعات را برای ذخیره سازی ،جستجو و بازیابی فراهم میکند.
اجزا بانک اطلاعاتی اکسس عبارتند از:
DataBase:
1. Table
2. Query
3. Form
4. Report
5. Macros
6. Modules
• Table :(جدول ) هر جدول برای نگهداری دادههای خام بانک اطلاعاتی است.دادهها را شما در جدول وارد میکنید.جداول سپس این دادهها را به شکل سطرها و ستونهایی سازماندهی میکند.
• Query :هر پرس و جو برای استخراج اطلاعات مورد نظر از یک بانک اطلاعاتی مورد استفاده قرار میگیردهر پرس و جو میتواند گروهی از رکوردها را که شرایط خاص دارا هستند انتخاب کند.پرس و جوها را میتوان بر اساس جداول یا پرس و جوهای دیگر اماده نمود. با استفاده از پزسوجوها میتوان رکوردهای بانک اطلاعاتی را انتخاب کرد، تغییر داد و یا حذف نمود.
• Form :متداولترین روش استفاده از فرمها،برای ورود و نمایش دادهها است.
• Report :گزارش ها میتوانند بر اساس جدول ،پرسوجوها باشند ،قابلیت گزارش چاپ دادهها میباشدگزارشها را میتوان بر اساس چند جدول و پرسوجو تهیه نمود تا رابطه بین دادهها را نشان داد.
• Macro :ماکروها به خودکار کردن کارهای تکراری ،بدون نوشتن برنامههای پیچیده یا فراگیری یک زبان برنامه نویسی ، یاری میکند، در واقع ماکروها یکسری قابلیتهایی هستند که امکان سریع سازی را فراهم میسازند.
• Modules : محیط بسیار قوی و با کیفیت برای برنامهنویسی محاسبات و عملیات پیچیده روی سیستم بانک اطلاعاتی.
-----------------------------------
الف - تعریف دادهData :
هرگونه اطلاعات لازم و کاربردی درباره یک موجودیت را یک داده میگویند.
ب- تعریف Fild :
به هر ستون یک جدول که در بر گیرنده کلیه اطلاعات مربوط به آن ستون میباشد و بخشی از یک موجودیت را تشگیل میدهد فیلد گفته میشود.
ت- تعریف Record :
به هر سطر یک جدول که اطلاعات مربوط به یک موجودیت را نشان میدهد ، رکورد گویند.
ث- تعریف پایگاه دادهای ارتباطی:
پایگاه دادههای ارتباطی، مجموعهای از جدولهای داده است که یک فیلد مشترک در هر یک از جدولهای موجود دارد و از طریق آن میتوان دادهها را بهم ربط داد.به این مدل از پایگاه دادهها ، پایگاه دادههای ارتباطی RelationShip میگویند.