VB.Net/Database ADO.net/Table Relation

Материал из VB Эксперт
Перейти к: навигация, поиск

DataRelation: Create a relation between the two tables

<source lang="vbnet"> Imports System Imports System.Data Imports System.Windows.Forms Imports System.Data.SqlClient public class MainClass

  Shared Sub Main()
      Dim form1 As Form = New Form1
      Application.Run(form1)
  End Sub

End Class


Public Class Form1

  Inherits System.Windows.Forms.Form
  1. Region " Windows Form Designer generated code "
  Public Sub New()
     MyBase.New()
     "This call is required by the Windows Form Designer.
     InitializeComponent()
     "Add any initialization after the InitializeComponent() call
  End Sub
  "Form overrides dispose to clean up the component list.
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
     If disposing Then
        If Not (components Is Nothing) Then
           components.Dispose()
        End If
     End If
     MyBase.Dispose(disposing)
  End Sub
  "Required by the Windows Form Designer
  Private components As System.ruponentModel.IContainer
  "NOTE: The following procedure is required by the Windows Form Designer
  "It can be modified using the Windows Form Designer.  
  "Do not modify it using the code editor.
  Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
  Friend WithEvents DataSet1 As System.Data.DataSet
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
     Me.DataGrid1 = New System.Windows.Forms.DataGrid
     Me.DataSet1 = New System.Data.DataSet
     CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).BeginInit()
     CType(Me.DataSet1, System.ruponentModel.ISupportInitialize).BeginInit()
     Me.SuspendLayout()
     "
     "DataGrid1
     "
     Me.DataGrid1.DataMember = ""
     Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
     Me.DataGrid1.Location = New System.Drawing.Point(0, 0)
     Me.DataGrid1.Name = "DataGrid1"
     Me.DataGrid1.Size = New System.Drawing.Size(416, 224)
     Me.DataGrid1.TabIndex = 0
     "
     "DataSet1
     "
     Me.DataSet1.DataSetName = "NewDataSet"
     Me.DataSet1.Locale = New System.Globalization.CultureInfo("en-GB")
     "
     "Form1
     "
     Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
     Me.ClientSize = New System.Drawing.Size(408, 221)
     Me.Controls.Add(Me.DataGrid1)
     Me.Name = "Form1"
     Me.Text = "Form1"
     CType(Me.DataGrid1, System.ruponentModel.ISupportInitialize).EndInit()
     CType(Me.DataSet1, System.ruponentModel.ISupportInitialize).EndInit()
     Me.ResumeLayout(False)
  End Sub
  1. End Region
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     "Create Connection object
     Dim thisConnection As New SqlConnection _
        ("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;" & _
         "database=MyDatabase")
     " Sql Queries 
     Dim sql1 As String = _
        "SELECT * FROM Employee; "
     Dim sql2 As String = _
        "SELECT * FROM Employee"
     Dim sql As String = sql1 & sql2
     " Create Data Adapter
     Dim da As New SqlDataAdapter(sql, thisConnection)
     " Map Default table names to Employees and Orders
     da.TableMappings.Add("Table", "Employee")
     da.TableMappings.Add("Table1", "Employee")
     " Fill Dataset
     da.Fill(DataSet1)
     " Create a relation between the two tables
     "Dim dr As New DataRelation( _
     "   "EmployeeOrder", _
     "   DataSet1.Tables(0).Columns("ID"), _
     "   DataSet1.Tables(1).Columns("ID"))
     "DataSet1.Relations.Add(dr)
     " Bind the data to the grid at runtime
     DataGrid1.SetDataBinding(DataSet1, "Employee")
  End Sub

End Class


 </source>


Define Table relation and load combined data into DataGrid

<source lang="vbnet">

Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ruponentModel
Imports System.Windows.Forms
Imports System.Data
Imports System.Data.SqlClient

Public Class MainClass

   Shared Sub Main(  )
       Application.Run(New ADOForm1() )
   End Sub
  

End Class

 Public Class ADOForm1
    Inherits System.Windows.Forms.Form
    Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
    Private components As System.ruponentModel.Container
    " private System.Data.ADO.ADOConnection myConnection;
    Private myConnection As System.Data.SqlClient.SqlConnection
    Private myDataSet As System.Data.DataSet
    Private myCommand As System.Data.SqlClient.SqlCommand
    Private myCommand2 As System.Data.SqlClient.SqlCommand
    Private myDataAdapter As System.Data.SqlClient.SqlDataAdapter
    Private myDataAdapter2 As System.Data.SqlClient.SqlDataAdapter
    Public Sub New(  )
        InitializeComponent(  )
        " create the connection object and open it
        Dim connectionString As String = _
            "server=localhost; uid=sa; " & _
            "pwd=YourPassword; database=northwind"
        myConnection = _
        New System.Data.SqlClient.SqlConnection(connectionString)
        myConnection.Open(  )
        " create the DataSet and set a property
        myDataSet = New System.Data.DataSet(  )
        myDataSet.CaseSensitive = True
        " create the SqlCommand  object and assign the
        " connection and the select statement
        myCommand = New System.Data.SqlClient.SqlCommand(  )
        myCommand.Connection = myConnection
        myCommand.rumandText = "Select * from Employees"
        myCommand2 = New System.Data.SqlClient.SqlCommand(  )
        myCommand2.Connection = myConnection
        myCommand2.rumandText = "Select * from Orders"
        " create the myDataAdapter object and pass in the
        " SQL Command object and establish the table mappings
        myDataAdapter = New System.Data.SqlClient.SqlDataAdapter(  )
        myDataAdapter2 = New System.Data.SqlClient.SqlDataAdapter(  )
        myDataAdapter.SelectCommand = myCommand
        myDataAdapter2.SelectCommand = myCommand2
        myDataAdapter.TableMappings.Add("Table", "Employees")
        myDataAdapter2.TableMappings.Add("Table", "Orders")
        " Tell the myDataAdapter object to fill the DataSet
        myDataAdapter.Fill(myDataSet)
        myDataAdapter2.Fill(myDataSet)
        Dim myDataRelation As System.Data.DataRelation
        Dim dataColumn1 As System.Data.DataColumn
        Dim dataColumn2 As System.Data.DataColumn
        dataColumn1 = _
            myDataSet.Tables("Employees").Columns("EmployeeID")
        dataColumn2 = _
            myDataSet.Tables("Orders").Columns("EmployeeID")
        myDataRelation = New System.Data.DataRelation( _
            "EmployeesToOrders", dataColumn1, dataColumn2)
        myDataSet.Relations.Add(myDataRelation)
        Dim dataSetView As DataViewManager = _
            myDataSet.DefaultViewManager
        " display it in the grid
        DataGrid1.DataSource = _
            dataSetView
        DataGrid1.DataMember = "Employees"
    End Sub "New
    Private Sub InitializeComponent(  )
        Me.ruponents = New System.ruponentModel.Container(  )
        Me.dataGrid1 = New System.Windows.Forms.DataGrid(  )
        dataGrid1.Location = New System.Drawing.Point(48, 24)
        dataGrid1.Size = New System.Drawing.Size(368, 160)
        dataGrid1.TabIndex = 0
        Me.Text = "ADOFrm1"
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(464, 273)
        Me.Controls.Add(dataGrid1)
    End Sub 
End Class 
          
        
 </source>


Relational Data Navigation

<source lang="vbnet"> Imports System.Data.SqlClient Imports System.Windows.Forms <Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Relation

   Inherits System.Windows.Forms.Form
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.cmdClear = New System.Windows.Forms.Button
       Me.cmdFill = New System.Windows.Forms.Button
       Me.lstOrder = New System.Windows.Forms.ListBox
       Me.SuspendLayout()
       "
       "cmdClear
       "
       Me.cmdClear.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
       Me.cmdClear.Location = New System.Drawing.Point(210, 238)
       Me.cmdClear.Name = "cmdClear"
       Me.cmdClear.Size = New System.Drawing.Size(72, 24)
       Me.cmdClear.TabIndex = 5
       Me.cmdClear.Text = "Clear"
       "
       "cmdFill
       "
       Me.cmdFill.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
       Me.cmdFill.Location = New System.Drawing.Point(10, 238)
       Me.cmdFill.Name = "cmdFill"
       Me.cmdFill.Size = New System.Drawing.Size(72, 24)
       Me.cmdFill.TabIndex = 4
       Me.cmdFill.Text = "Fill"
       "
       "lstOrder
       "
       Me.lstOrder.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                   Or System.Windows.Forms.AnchorStyles.Left) _
                   Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
       Me.lstOrder.IntegralHeight = False
       Me.lstOrder.Location = New System.Drawing.Point(10, 3)
       Me.lstOrder.Name = "lstOrder"
       Me.lstOrder.Size = New System.Drawing.Size(272, 229)
       Me.lstOrder.TabIndex = 3
       "
       "Relation
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(292, 267)
       Me.Controls.Add(Me.cmdClear)
       Me.Controls.Add(Me.cmdFill)
       Me.Controls.Add(Me.lstOrder)
       Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
       Me.Name = "Relation"
       Me.Text = "Relation"
       Me.ResumeLayout(False)
   End Sub
   Friend WithEvents cmdClear As System.Windows.Forms.Button
   Friend WithEvents cmdFill As System.Windows.Forms.Button
   Friend WithEvents lstOrder As System.Windows.Forms.ListBox
   Private Sub cmdFill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFill.Click
       Dim Connect As String = "Data Source=localhost;Integrated Security=True;Initial Catalog=Northwind;"
       Dim con As New SqlConnection(Connect)
       Dim SQL As String = "SELECT * FROM Orders " 
       Dim cmd As New SqlCommand(SQL, con)
       Dim adapter As New SqlDataAdapter(cmd)
       Dim dsNorthwind As New DataSet()
       con.Open()
       adapter.Fill(dsNorthwind, "Orders")
       cmd.rumandText = "SELECT * FROM Customers"
       adapter.Fill(dsNorthwind, "Customers")
       cmd.rumandText = "SELECT * FROM Employees"
       adapter.Fill(dsNorthwind, "Employees")
       con.Close()
       Dim relCustomersOrders As New DataRelation("CustomersOrders", _
        dsNorthwind.Tables("Customers").Columns("CustomerID"), _
        dsNorthwind.Tables("Orders").Columns("CustomerID"))
       dsNorthwind.Relations.Add(relCustomersOrders)
       Dim rowParent, rowChild As DataRow
       For Each rowParent In dsNorthwind.Tables("Customers").Rows
           For Each rowChild In rowParent.GetChildRows(relCustomersOrders)
               lstOrder.Items.Add(rowParent("CompanyName") & _
                " ordered on " & rowChild("OrderDate"))
           Next
       Next
   End Sub
   Private Sub cmdClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClear.Click
       lstOrder.Items.Clear()
   End Sub

End Class


 </source>