دستیابی به بانک اطلاعاتی Access با استفاده از VB.NET

دستیابی به بانک اطلاعاتی Access با استفاده از VB.NET
در این مقاله قصد داریم به نحوه  بازیابی و نمایش اطلاعات موجود در یک بانک اطلاعاتی Access اشاره نمائیم . هدف از مقاله فوق ، پرداختن به تمامی رویکردهای موجود در این زمینه نبوده و صرفا" به معرفی یکی از گزینه های موجود در این زمینه اشاره خواهد شد. در این راستا از تکنولوژی های ASP.NET ، ADO.NET و VB.NET استفاده خواهد شد . از کلاس های  OleDbConnection ، OleDbCommand و OleDbDataReader  مربوط به  ADO.NET  بمنظور انجام عملیات لازم در ارتباط با بانک اطلاعاتی ، از ASP.NET بمنظور ایجاد فرم وب و ارائه داده با استفاده از کنترل سرویس دهنده Table و از زبان VB.NET بمنظور نوشتن دستورالعمل های مورد نظر استفاده می گردد .
در ابتدا لازم است با سه کلاس
ADO.NET که در ادامه از آنان استفاده خواهد شد ، بیشتر آشنا شویم :

·         کلاس OleDbConnection . شی فوق ، یک اتصال منحصر بفرد با یک منبع داده را  ایجاد می نماید. در رابطه با یک بانک اطلاعاتی سرویس گیرنده / سرویس دهنده ، این امر معادل یک اتصال شبکه به سرویس دهنده است . با توجه به قابلیت های حمایت شده توسط native OLE DB Provider ، برخی از متدها و یا خصلت ها مربوط به شی OleDbConnection ممکن است در دسترس و قابل استفاده نباشد . زمانیکه نمونه ای  از OleDbConnection ایجاد می گردد ، تمامی خصلت های مربوطه ، مقدار اولیه خود را دارا خواهند بود . پس از اتمام عملیات موردنظر در ارتباط با بانک اطلاعاتی ،  می بایست با فراخوانی Close و یا Dispose اقدام به  غیر فعال نمودن  اتصال ایجاد شده با بانک اطلاعاتی مربوطه نمود.

·         کلاس OleDbCommand .  یک عبارت SQL و یا Stored procedure را بمنظور اجراء در رابطه با یک منبع داده ارائه می نماید. کلاس فوق از متدهای زیر بمنظور اجرای دستورات در رابطه با یک منبع داده استفاده می نماید.
 
ExecuteReader  . متد فوق ، دستوراتی را اجراء می نماید که خروجی آنان شامل سطرهائی خواهد بود.
 
ExecuteNonQuery . باعث اجرای دستوراتی نظیر SQL INSERT,DELETE,UPDATE و SET خواهد شد .
 
ExecuteScalar  . بازیابی صرفا" یک مقدار از یک بانک اطلاعاتی

·         کلاس OleDbDataReader . متد فوق ، امکان خواندن سطرهائی از داده موجود در یک منبع داده را فراهم می نماید( فقط بسمت جلو)  . بمنظور ایجاد یک OleDbDataReader ، می بایست متد ExecuteReader مربوط به شی OleDbCommand فراخوانده شود. مادامیکه OleDbDataReader در حال استفاده است (اتصال مرتبط OleDbConnection ) ، عملیات دیگری را در ارتباط با OleDbConnection  نمی توان انجام داد .

امکانات مورد نیاز
برای دنبال نمودن این مقاله و اجرای نمونه مثالی که در ادامه بررسی می گردد ، به امکانات زیر نیاز خواهد بود :

  • نصب یکی از نسخه های ویندوز 2000 و یا نسخه ویندوز 2003
  • نصب IIS 
  •  نصب فریمورک دات نت نسخه 1.0 ,یا نسخه 1.1
  • یک بانک اطلاعاتی نمونه اکسس نظیر Northwind

ایجاد یک برنامه وب ASP.NET با استفاده از VB.NET
بمنظور ایجاد یک برنامه وب ASP.NET با استفاده از VB.NET مراحل زیر را دنبال می نمائیم :

  •  اجرای برنامه ویژوال استودیو دات نت
  • از طریق منوی File ، گزینه New و در ادامه Project را انتخاب نمائید .
  •  در جعبه محاوره ای New Project ، در بخش Project Types گزینه Visual Bacic Projects را انتخاب ( کلیک ) و در ادامه ASP.NET Web Application  را انتخاب نمائید .  
  •  در فیلد Location ، بجای نام پیش فرض #WebApplication ، نام TestAccessDB را انتخاب نمائید . در صورتیکه از یک سرویس دهنده محلی استفاده میگردد ، می توان  نام سرویس دهنده را http://localhost در نظر گرفت . بدین ترتیب در فیلد Location ، آدرس مربوطه بصورت زیر نشان داده خواهد شد : http://localhost/TestAccessDB

 

ایجاد یک فرم وب نمونه 
در نمونه کد نوشته شده از کنترل سرویس دهنده Table مربوط به ASP.NET استفاده شده که بصورت پویا یک نمایش ساده از داده بازیابی شده را نشان خواهد داد. ASP.NET ، مجموعه متنوعی از کنترل های انعطاف پذیر را ارائه که می توان از آنان با توجه به رویکردهای متفاوت در رابطه با نمایش داده استفاده نمود. بمنظور ایجاد یک فرم وب در پروژه ایجاد شده در مرحله قبل ، مراحل زیر را دنبال می نمائیم :

·         اضافه نمودن یک فرم جدید با نام DataSample.aspx  به برنامه وب ASP.NET در ویژوال استودیو دات نت . بمنظور انجام خواسته فوق ، دو مرحله زیر را دنبال می نمائیم :
مرحله یک : در
Solution Explorer ، بر روی گره Project کلیک سمت راست نموده و گزینه Add  و در ادامه گزینه Add Web Form انتخاب گردد.
مرحله دو : درفیلد
Name ، نام DataSample.aspx را درج و در ادامه گزینه Open انتخاب گردد .

·         از طریق Toolbox مربوط به Web Forms Tab ، یک Table ASP.NET Server Control را انتخاب ( Drag ) و بر روی صفحه aspx . مستقر نمائید ( در حالت Desgin view ) .

·         در Properties نام ID را به DisplayTable تغییر دهید .

·         در Solution Explorer ، بر روی صفحه aspx . ، کلیک سمت راست نموده و گزینه View Code را انتخاب نمائید .

·          مرجع namespace زیر را در بالاترین قسمت فایل کلاس code-behind وارد نمائید .

 

Imports System.Data.OleDb

·         کد زیر را در ارتباط با رویداد  Page_load در نظر می گیریم :

Page_Load Event handler

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

استفاده از یک متغیر رشته ای بمنظور ذخیره سازی Connectionstring'

  Dim connectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" &_
  "Data Source=C:MyDBNWIND.MDB"

ایجاد یک شی OleDbConnection و ارسال مقدار متغیر ConnectionString '

  Dim cn As OleDbConnection = New OleDbConnection(connectString)

فعال نمودن Connection'

  cn.Open()

استفاده از یک متغیر بمنظور ذخیره عبارت SQL'

  Dim selectString As String = "SELECT CustomerID, ContactName, Phone FROM Customers"

ایجاد یک شی OledbCommand'
در این خط متغیر عبارت SQL و شی OleDbConnection ، ارسال می گردد '

  Dim cmd As OleDbCommand = New OleDbCommand(selectString, cn)

ارسال CommandText به Connection و ایجاد یک OleDbDataReader '
OleDbDataReader  از نوع " فقط بسمت جلو " خواهد بود'

  Dim reader As OleDbDataReader = cmd.ExecuteReader()

تنظیم عرض جدول '

  DisplayTable.Width = Unit.Percentage(90.0)

ایجاد یک سطر جدید برای اضافه نمودن عنوان جدول'

  Dim tableHeading As TableRow = New TableRow()

ایجاد و اضافه نمودن سلول های  شامل ستون Customer ID  '

  Dim customerIDHeading As TableHeaderCell = New TableHeaderCell()
  customerIDHeading.Text = "Customer ID"
  customerIDHeading.HorizontalAlign = HorizontalAlign.Left
  tableHeading.Cells.Add(customerIDHeading)

ایجاد و اضافه نمودن سلول های  شامل ستون Contact Name   '

   Dim contactNameHeading As TableHeaderCell = New TableHeaderCell()
   contactNameHeading.Text = "Contact Name"
   contactNameHeading.HorizontalAlign = HorizontalAlign.Left
   tableHeading.Cells.Add(contactNameHeading)

ایجاد و اضافه نمودن سلول های  شامل ستون Phone   '

    Dim phoneHeading As TableHeaderCell = New TableHeaderCell()
    phoneHeading.Text = "Phone"
    phoneHeading.HorizontalAlign = HorizontalAlign.Left
    tableHeading.Cells.Add(phoneHeading)

    DisplayTable.Rows.Add(tableHeading)

تکرار در بین داده انتخابی نتایج و افزودن داده برای هر یک از ستون های مورد نظر در جدول '

    While(reader.Read())
       Dim detailsRow As TableRow = New TableRow()
       Dim customerIDCell As TableCell = New TableCell()
       customerIDCell.Text = reader("CustomerID").ToString()
       detailsRow.Cells.Add(customerIDCell)
       Dim contactNameCell As TableCell = New TableCell()
       contactNameCell.Text = reader("ContactName").ToString()
       detailsRow.Cells.Add(contactNameCell)
       Dim phoneCell As TableCell = New TableCell()
       phoneCell.Text = reader("Phone").ToString()
       detailsRow.Cells.Add(phoneCell)
       DisplayTable.Rows.Add(detailsRow)
    End While

بستن  Connection'

    reader.Close()
   cn.Close()
End Sub

·         مقدار متغیر ConnectString در ابتدای کد نوشته شده فوق را تغییر و آن را به محلی که بانک اطلاعاتی موجود است ، اشاره دهید .

·          از طریق منوی File ، گزینه Save All را انتخاب تا فرم وب و سایر فایل های مرتبط با پروژه ، ذخیره گردد .

·         از طریق منوی Build ، گزینه Build Solution را بمنظور ایجاد پروژه ، فعال نمائید.

·         در Solution Explorer ، بر روی DataSample.aspx کلیک سمت راست و در ادامه گزینه View in Browser را انتخاب نمائید . در ادامه صفحه در مرورگر نمایش و شامل داده موجود در بانک اطلاعاتی مربوطه است .

 

اشکالات و خطاهای احتمالی
درزمان اجراء ، ممکن است با خطائی مانند زیر مواجه شویم :

The Microsoft Jet database engine cannot open the file 'C:MyDBNWIND.MDB'.
 It is already opened exclusively by another user, or you need permission to view its data.

·         خطای فوق ، اغلب بدلیل عدم داشتن مجوز لازم بمنظور دستیابی به فایل ( فایل بانک اطلاعاتی با انشعاب mdb . ) می باشد . بصورت پیش فرض ،  ASP.NET تحت ASPNET account  در فریمورک دات نت نسخه یک و یا NetworkService  در فریمورک دات نت نسخه 1،1 اجراء می گردد.در این رابطه لازم است تغییرات لازم در رابطه با  مجوز دستیابی به فایل mdb . و فولدری که شامل فایل است ، اعمال گردد .

·         از نصب عناصر مورد نیاز Microsoft Jet database بر روی سیستم ، مطمئن گردید. در صورتیکه MDAC 2.6 نصب شده باشد ( Microsoft Data Access Components 2.6) ، عناصر Jet را شامل نمی گردد . در چنین مواردی می بایست آخرین نسخه Jet 4.0 Service Pack ، بر روی سیستم نصب گردد.

متغیرهای ایستا در ASP.NET

در ASP همواره از شئ Application برای ذخیره متغیرهای سراسری استفاده می شد. این عمل از لحاظ اختصاص فضای حافظه چندان مناسب نبود. در دات نت می توانیم با سود بردن از خواص متغیرهای ایستا در اکثر موارد نتیجه بهتری بدست آوریم. این روش در اکثر موارد سریعتر از استفاده از شئ Application خواهد بود.

در دات نت اکثر اشیاء به صورت کلاس در نظر گرفته می شوند که فایل global.asax نیز از این قائده پیروی می کند. برای استفاده از این روش در ابتدا باید به این فایل نام یک کلا س را اختصاص دهیم. دقت کنید که همیشه سعی می کنیم در نامگذاری از اسامی که راهنمای ما باشند استفاده کنیم. برای مثال در اینجا از نام myglobal استفاده می کنیم. به منظور انجام این کار از کد زیر استفاده می شود.

<%@ Application Classname="MyGlobals" %>

سپس با استفاده از تگ Script متغیرهای خود را تعریف می نماییم. دقت کنید که باید از کلمات کلیدی Public و Shared هم استفاده نما یید.

<Script language="vb" runat="server">
   Public Shared sAli as String = "This is just a test"
</Script>

با کد بالا ما متغیر خود را به نام sAli تعریف نمودیم. حال با استفاده از نام کلاس و این نام می توا نیم آن را در تمام صفحات خود به صورت مستقیم صدا کنیم.

x = MyGlobals.sAli

کدهای نمونه را می توانید مشاهده کنید.

<%@ Application Classname="MyGlobals" %>

<Script language="vb" runat="server">

   Public Shared sGreeting as String = "This is just a test"

</Script>
<% @Page Language="VB" %>
<HTML>
    <HEAD>
        <script Language='vb' runat=server>
            Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
               Label1.Text = MyGlobals.sGreeting
            End Sub
        </script>
    </HEAD>
    <body>
        <asp:label runat=server id=Label1></asp:label>
    </body>
</HTML>

ساختارهای شرطی در Visual Basic.NET

این گفتار برآنیم تا ساختارهای شرطی در ویژوال بیسیک دات نت را بررسی کنیم. این ساختارها If..Then و Select..Case می باشند.

ساختار If..Then
ابتدائی ترین ساختار شرطی در ویژوال بیسیک دات نت ساختار
If..Then می باشد. با استفاده از این ساختار هنگامی که شرط مورد نظر برقرار باشد، می توان دستور یا دستورات متعددی را اجرا نمود.

بعنوان مثال در برنامه زیر اگر زمان سیستم بعد از ظهر را نشان دهد، جمله "Good Evening IranASP.NET" بر روی صفحه نمایش داده می شود.

<%
Dim myTime As DateTime
myTime = Now

if Hour(myTime) >= 12 then
Response.write ("Good Evening IranASP.NET !")
end if
%>

همچنین ساختار If..Then عبارت Else را هم پشتیبانی می کند. اگر شرط مربوط به If برقرار نباشد، دستورات موجود در قسمت Else اجرا می شوند. به مثال زیر توجه فرمائید.

<%
Dim myTime As DateTime
myTime = Now

if Hour(myTime) >= 12 then
Response.write ("Good Evening IranASP.NET !")
else
Response.write ("Good Morning IranASP.NET !")
end if

%>

ساختار Select..Case
در ساختار
Select..Case می توان مقداری را با مقادیر مختلفی مقایسه کرده و دستورات مربوط به مقدار یافت شده را اجرا نمود. بعنوان مثال قطعه برنامه زیر پیامهای مختلفی را برحسب نوع مرورگر نمایش می دهد.

<%
Dim strBrowser As String

strBrowser = Request.Browser.Browser
Select Case strBrowser
Case "IE" 
Response.Write( "You are using Internet Explorer!" )
Case "Netscape"
Response.WRite( "You are using Netscape!" )
Case Else
Response.Write( "What browser are you using?" ) 
End Select
%>

دقت داشته باشید که ساختار Select..Case در برنامه فوق دارای یک قسمت Case Else می باشد. هرگاه هیچ یک از حالات مقایسه ای برقرار نبود، دستورات موجود در قسمت Case Else اجرا می گردند. استفاده از Case Else اختیاری است.