پنج شنبه ۴ خرداد ۱۳۹۶
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 نمایش جداول و دیدهای یک بانک اطلاعاتی Access , Oracle و SQL Server و خصوصیات یک فیلد انتخابی
Visual Basic Database / LINQ / EF
تاریخ ثبت:  ۸۶/۱۲/۱۶
تعداد نمایش:  ۱۰۰۲۲
  نویسنده: نادر رفیعی
 
   ۵  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

دراین مقاله بایکی از راههای نمایش جداول ، دیدها و ستونهای جداول یک بانک اطلاعاتی می باشد.دراین مقاله نحوه اتصال به یک بانک اطلاعاتی Access و یا SQL Server و همچنین Oracle نیز تشریح گردیده است.همانند شکل زیر کاربر با انتخاب Open a new connection از منوی Connection و سپس نمایش فرم Connection Manager (شکل ۲)نوع بانک اطلاعاتی را انتخاب و سپس از منوی Load همانند شکل زیر جداول و دیدهای بکاررفته در بانک را مشاهده و باکلیک برروی یک جدول لیست ستونهای ان را درسمت راست مشاهده خواهد نمود.(سورس این برنامه را می توانید در پایین همین مقاله دانلود کنید).

شکل ۱: فرم اصلی برنامه

دربرنامه متغیرهای زیر در ماژول Appvar بصورت تعریف شده اند. توضیح هر متغیردرجلوی ان نمایش داده شده است.

Module AppVars

    Public gCurrentDataModel As String     'current data model selected

    Public gCurrentDatabaseType As String  'type of database used

    Public gConnectionString As String     'full connect string

    Public gInitialCatalog As String       'sql server initial catalog for

    Public gProviderString As String       'provider name used for access

    Public gServerName As String       'server name for live data access

    Public gUserID As String           'its the user id used to connect

    Public gPassword As String         'its the password value used

    Public gCurrentTables() As String  'tables stored to populate lists

    Public gCurrentViews() As String   'views stored to populate lists

End Module

فرم Connection Manager بصورت زیر می باشد دراین فرم باانتخاب نوع بانک اطلاعاتی و سپس فشردن دکمه Ok رشته اتصال به بانک ساخته می شود.

شکل ۲ : فرم مدیریت اتصالها

درفرم Connection Manager هر زبانه دارای یک دکمه Ok و یک دکمه Test برای تست رشته اتصال می باشد.

فضاهای نامی که در این فرم بکاررفته به شرح زیر می باشند و همچنین چند متغیر که دراین فرم تعیریف شده اند به شرح زیر می باشد.

Imports System.Collections

Imports System.IO

Imports System.Runtime.Serialization.Formatters.Binary

Imports System.Runtime.Serialization

Public Class frmConnect

#Region "Declarations"

    Private mCurrentDataModel As String

    Private mCurrentDatabaseType As String

    Private mConnectionString As String

    Private mProviderString As String

    Private mServerName As String

    Private mInitialCatalog As String

    Private mServerPort As String

    Private mDatabaseName As String

    Private mUserID As String

    Private mPassword As String

#End Region

باتوجه به اینکه کاربر کدام نوع بانک راانتخاب نموده و سپس دکمه Ok را کلیک نموده یک اتصال به بانک اطلاعاتی انتخابی ساخته می شود (طبق کدهای زیر) ومتغیرهایی که در ماژول تعریف شده اند مقداردهی می گردند.

1-کدمربوط به رویداد کلیک دکمه BtnOracleClick (وقتی کاربر یک بانک اطلاعاتی اوراکل راانتخاب می کند)

Private Sub btnOracleOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

            Handles btnOracleOK.Click

        mCurrentDataModel = "MyOracle"

        mCurrentDatabaseType = "Oracle"

        mProviderString = txtOracleProvider.Text

        mPassword = txtOraclePassword.Text

        mUserID = txtOracleUserID.Text

        mServerName = txtOracleDBname.Text

        mConnectionString = "Provider=" & mProviderString & _

                            ";Password=" & mPassword & _

                            ";User ID=" & mUserID & _

                            ";Data Source=" & mServerName

 

        'Test Connection

        Dim cn As ADODB.Connection

        cn = New ADODB.Connection

        cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient

        Try

            cn.Open(mConnectionString)

            cn.Close()

            cn = Nothing

        Catch ex As Exception

            MessageBox.Show(ex.Message.ToString(), "Application Settings

            Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

        End Try

        cn = Nothing

        'set app setting global variables

        AppVars.gCurrentDataModel = mCurrentDataModel

        AppVars.gCurrentDatabaseType = mCurrentDatabaseType

        AppVars.gConnectionString = mConnectionString

        AppVars.gProviderString = mProviderString

        AppVars.gServerName = mServerName

        AppVars.gUserID = mUserID

        AppVars.gPassword = mPassword

 

        'create hashtable to hold settings

        Dim ht As New Hashtable

        ht.Add("CurrentDataModel", gCurrentDataModel)

        ht.Add("CurrentDatabaseType", gCurrentDatabaseType)

        ht.Add("ConnectionString", gConnectionString)

        ht.Add("ProviderString", gProviderString)

        ht.Add("ServerName", gServerName)

        ht.Add("UserID", gUserID)

        ht.Add("Password", gPassword)

        'serialize data

        SerializeAppVars(ht)

        'cache view names

        StoreViewNames()

        Me.Dispose()


End Sub

روال فرعی زیر درواقع برای این تعریف شده است که اگر کاربر برنامه را مجددااجرانمود تنظیمات قبلی نمایش داده شوند

Public Sub StoreViewNames()

        Dim SchemaTable As DataTable

        Dim arrViews() As String = Nothing

        Dim arrTables() As String = Nothing

        If AppVars.gConnectionString <> "" Then

            'Connect to the database

            Dim conn As New System.Data.OleDb.

            OleDbConnection(AppVars.gConnectionString)

            Try

                conn.Open()

               'get view names

                SchemaTable =

                conn.GetOleDbSchemaTable(System.Data.

                OleDb.OleDbSchemaGuid.Tables, New Object()

                {Nothing, Nothing, Nothing, Nothing})            

                Dim int As Integer

                Dim incr As Integer = 0

                For int = 0 To SchemaTable.Rows.Count - 1

                    If SchemaTable.Rows(int)!TABLE_TYPE.ToString = "TABLE"

                    Then

                        Dim strTempTableName As String =

                        SchemaTable.Rows(int)!TABLE_NAME.ToString()

                        ReDim Preserve arrTables(incr + 1)

                        arrTables(incr) = strTempTableName

                        incr = incr + 1

                    End If

                Next

                For int = 0 To SchemaTable.Rows.Count - 1

                    If SchemaTable.Rows(int)!TABLE_TYPE.ToString = "VIEW"

                    Then

                        Dim strTempViewName As String =

                        SchemaTable.Rows(int)!TABLE_NAME.ToString()

                        ReDim Preserve arrViews(incr + 1)

                        arrViews(incr) = strTempViewName

                        incr = incr + 1

                    End If

                Next

            Catch ex As Exception

                MessageBox.Show(ex.Message.ToString(), "Application Settings

                Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Finally

                conn.Close()

                conn = Nothing

 

            End Try

            AppVars.gCurrentViews = arrViews

            AppVars.gCurrentTables = arrTables

        End If

End Sub

کدمربوط به رویدادکلیک BtnOracleTest : دکمه test واقع در سربرگ Oracle

Private Sub btnOracleTest_Click(ByVal sender As System.Object, ByVal e As

    System.EventArgs) Handles btnOracleTest.Click

    mProviderString = txtOracleProvider.Text

    mPassword = txtOraclePassword.Text

    mUserID = txtOracleUserID.Text

    mServerName = txtOracleDBname.Text

    mConnectionString = "Provider=" & mProviderString & _

                            ";Password=" & mPassword & _

                            ";User ID=" & mUserID & _

                            ";Data Source=" & mServerName

 

    'Test Connection

    Dim cn As ADODB.Connection

    cn = New ADODB.Connection

    cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient

    Try

        cn.Open(mConnectionString)

        cn.Close()

        cn = Nothing

        MessageBox.Show("Connection attempt successful, the database

        connection information provided has been successfully used to

        connect to the database.", "Connection Successful",

        MessageBoxButtons.OK, MessageBoxIcon.Information)

    Catch ex As Exception

        MessageBox.Show("Connection attempt failed.", "Unable to

            Connect", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

    cn = Nothing


End
Sub

فرم اصلی برنامه مانند زیر می باشد که فضاهای نامی مربوطه با آن اضافه شده اند.

Imports System.Data

Imports System.Data.OleDb

Imports System.Data.SqlClient

Imports System.Data.SqlTypes

Imports System.Collections

Imports System.Text

Imports System.IO

Imports System.Runtime.Serialization.Formatters.Binary

Imports System.Runtime.Serialization

Public Class frmMain

#Region "Declarations"

    Public SelectedTable As String

    Private mConnectionString As String

    Private mTableSelected As Boolean

#End Region

توجه نمایید که Reference های زیر بایستی به پروژه اضافه شده باشند.

دررویداد Load فرم اصلی برنامه کدهای زیر را بنویسید. درواقع این کد فایل حاوی رشته اتصال را اگر در مسیر فایل اجرایی پروژه وجودداشته باشد می خواند.

Private Sub frmMain_Load(ByVal sender As Object, ByVal e As

    System.EventArgs) Handles Me.Load

 

    Dim mConnectionString As String = ""

    DeserializeAppSettings()

    If AppVars.gConnectionString <> "" Then

        mConnectionString = AppVars.gConnectionString.ToString()

        Me.Text = "Database - " & AppVars.gCurrentDatabaseType.ToString

    Else

        Exit Sub

    End If

    If Not Trim(mConnectionString) = Nothing Then

         Try

            OpenTablesOnStart(Trim(mConnectionString))

         Catch ex As Exception

            MessageBox.Show(ex.Message.ToString(), "Data Load Error",

            MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

        End Try

    End If


End
Sub

رویه فرعی زیر که دررویداد Load فرم فراخوانی می گردد لیست جداول و دیدهای بانک اطلاعاتی را درون Listbox ها نمایش داده می شود.

Private Sub OpenTablesOnStart(ByVal strConn As String)

    Dim SchemaTable As DataTable

    'Connect to the database

    Dim conn As New System.Data.OleDb.OleDbConnection(strConn)

    Try

        conn.Open()

        'Get table and view names

        SchemaTable = conn.GetOleDbSchemaTable(System.Data.

  OleDb.OleDbSchemaGuid.Tables, New Object()

  {Nothing, Nothing, Nothing, Nothing})

        lstTables.Items.Clear()

        lstViews.Items.Clear()

        Dim int As Integer

        For int = 0 To SchemaTable.Rows.Count - 1

            If SchemaTable.Rows(int)!TABLE_TYPE.ToString = "TABLE" Then

               lstTables.Items.Add(SchemaTable.Rows(int)!TABLE_NAME.ToString())

            End If

        Next

        For int = 0 To SchemaTable.Rows.Count - 1

             If SchemaTable.Rows(int)!TABLE_TYPE.ToString = "VIEW" Then          

                lstViews.Items.Add(SchemaTable.Rows(int)!TABLE_NAME.ToString())

             End If

        Next

    Catch ex As Exception

        MessageBox.Show(ex.Message.ToString(), "Data Load Error",

        MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

    End Try

    conn.Close()

End Sub

هنگام کلیک برروی یک جدول در لیست باکس مربوطه کدهای زیر اجرا می گردد.

 

Private Sub lstTables_SelectedIndexChanged(ByVal sender As System.Object,

    ByVal e As System.EventArgs) Handles lstTables.SelectedIndexChanged

    mTableSelected = True

    Dim tblName As String

    tblName = lstTables.SelectedItem.ToString()

    Dim conn As New System.Data.OleDb.OleDbConnection(mConnectionString)

    Try

        conn.Open()

        lstFields.Items.Clear()

 

        Dim dt_field As System.Data.DataTable = _

                    conn.GetOleDbSchemaTable( _

                        OleDb.OleDbSchemaGuid.Columns, _

                        New Object() {Nothing, Nothing, tblName})

        For Each dr_field As DataRow In dt_field.Rows

            Me.lstFields.Items.Add(dr_field("COLUMN_NAME").ToString)

        Next

    Catch ex As Exception

        MessageBox.Show(ex.StackTrace, "Error", MessageBoxButtons.OK,

        MessageBoxIcon.Exclamation)

    End Try

End Sub

هنگامیکه یک جدول و یادید راازلیست باکسهای سمت چپ انتخاب کنید لیست فیلدهای آن جدول و یادید در لیست باکس سمت راست نمایش داده می شود که باکلیک راست برروی یک فیلد و کلیک گزینه ظاهر شده خصوصیات آن فیلد از طریق یک کادر پیغام نمایش داده می شود.(مانند شکل زیر) . کد مربوط به این منو بصورت زیر می باشد.

Private Sub GetFieldInformationToolStripMenuItem_Click(ByVal sender As System.Object,

                                                                           ByVal e As System.EventArgs)

                 Handles GetFieldInformationToolStripMenuItem.Click

        Try

            Dim cn As New OleDbConnection(mConnectionString)

            Dim sSql As String

            If mTableSelected = True Then

                sSql = "SELECT [" & Me.lstFields.SelectedItem.ToString() & "]

                FROM [" & lstTables.SelectedItem.ToString() & "]"

            Else

                sSql = "SELECT [" & Me.lstFields.SelectedItem.ToString() & "]

                FROM [" & lstViews.SelectedItem.ToString() & "]"

            End If

            Dim da As New OleDbDataAdapter(sSql, cn)

            cn.Open()

            Dim ds As New DataSet

            da.Fill(ds)

            Dim sb As New StringBuilder

            Dim tbl As DataTable = ds.Tables(0)

            Dim col As New DataColumn

            For Each col In tbl.Columns

                sb.Append("Field Characteristics:" & Environment.NewLine &

                Environment.NewLine)

                sb.Append("Data Type:" & Environment.NewLine)

                sb.Append(col.DataType.ToString() & Environment.NewLine &

                Environment.NewLine)

                sb.Append("Is Unique?" & Environment.NewLine)

                sb.Append(col.Unique.ToString() & Environment.NewLine &

                Environment.NewLine)

                sb.Append("Allow Nulls?" & Environment.NewLine)

                sb.Append(col.AllowDBNull.ToString() & Environment.NewLine &

                Environment.NewLine)

                sb.Append("Default:" & Environment.NewLine)

                sb.Append(col.DefaultValue.ToString() & Environment.NewLine &

                Environment.NewLine)

                sb.Append("Auto Incr:" & Environment.NewLine)

                sb.Append(col.AutoIncrement.ToString() & Environment.NewLine

                & Environment.NewLine)

                sb.Append(d("Caption:" & Environment.NewLine)

                sb.Append(col.Caption.ToString())

                MessageBox.Show(sb.ToString(), "Database Item Specification

                for Column: " & col.ColumnName.ToString(),

                MessageBoxButtons.OK, MessageBoxIcon.Information)

 

                Exit For

            Next

        Catch ex As Exception

            MessageBox.Show(ex.StackTrace, ex.Message, MessageBoxButtons.OK,

            MessageBoxIcon.Exclamation)

        End Try

End Sub

دریافت سورس پروژه

 

 

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
نادر رفیعی
همه مقاله های نوشته شده توسط این کاربر (۸)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۱ از مجموع ۱ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
request علی همایی ۱۳۸۹/۴/۱۶
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to