addendum ado net n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Addendum – ADO.NET PowerPoint Presentation
Download Presentation
Addendum – ADO.NET

Loading in 2 Seconds...

play fullscreen
1 / 80

Addendum – ADO.NET - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

Addendum – ADO.NET. ADO.NET : het object model .NET Data Providers Connecteren met een database : Connection Uitvoeren van SQL Query : Command Lezen van data : De DataReader De DataAdapter De DataSet. ADO.NET. Het ADO.Net Object model. .NET Data Providers. Data Provider.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Addendum – ADO.NET' - happy


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
addendum ado net

Addendum – ADO.NET

ADO.NET : het object model

.NET Data Providers

Connecteren met een database : Connection

Uitvoeren van SQL Query : Command

Lezen van data : De DataReader

De DataAdapter

De DataSet

Visual Basic.NET

ado net
ADO.NET
  • Het ADO.Net Object model

Visual Basic.NET

net data providers
.NET Data Providers

Data Provider

  • Alle toegang in ADO.NET tot data sources gebeurt o.b.v. .NET Data providers. Is een verzameling klassen die code in staat stelt om met een specifieke gegevensbron te communiceren om gegevens op t ehalen, te bewerken.
  • .NET Framework bevat 2 .NET Data Providers
      • SQL Server Data Provider: geoptimaliseerde toegang tot SQL Server
        • Geimplementeerd in de System.Data.SqlClient Namespace
      • OLEDB Data Provider : toegang tot alle gegevensbronnen waarvoor OLE DB provider geinstalleerd
        • Geimplementeerd in de System.Data.OleDb Namespace
        • Vereisen installatie van MDAC 2.7 of later
  • Importeer namespace .NET Data Provider in project

Imports System.Data.SqlClient

Imports System.Data.OleDb

Visual Basic.NET

connecteren met een database
Connecteren met een database

Data Provider

Connection

Object

  • Connecteren met de database : Connection Object
    • Connections zijn verantwoordelijk voor het onderhouden van de fysieke verbinding tussen gegevensbron en .NET applicatie
    • Elke Data Provider implementeert eigen versie van connection klasse
      • SqlConnection in namespace System.Data.SQLClient
      • OleDBConnection in namespace System.Data.OleDb

Visual Basic.NET

connecteren met een database1
Connecteren met een database
  • Connecteren met een data source via OleDbConnection
    • Stel connection type in

Dim oConn as New OleDbConnection()

    • Geef data source op.
      • ConnectionString property bevat de string die gebruikt wordt om de verbinding met de gegevensbron te maken als de methode open wordt uitgevoerd

oConn.ConnectionString =“Provider=Microsoft.Jet.OLEDB.4.0;Data Source =“ & Application.StartUpPath & “\northwind.mdb”

    • Connecteer met data source

oConn.Open()

    • Sluiten van verbinding

If (not oConn is Nothing) AndAlso (oConn.State = ConnectionState.Open) then

oConn.close

End If

Opm : Niet vergeten want verbindingen worden niet automatisch gesloten als ze de scope verliezen

Visual Basic.NET

connecteren met een database2
Connecteren met een database
  • Of verkort op basis van constructor

Dim strConn = =“Provider=Microsoft.Jet.OLEDB.4.0;Data Source =“ & Application.StartUpPath & “\northwind.mdb”

Dim oConn as New OleDbConnection(strConn)

oConn.Open

oConn.Close

Visual Basic.NET

connecteren met een database3
Connecteren met een database
  • De connectionstring(formaat afhankelijk van namespace SqlClient of OleDB)
    • SqlConnection

“Data Source =name or IP adress server;Password=password;User ID=userID;Initial Catalog=databasename;Integrated Security=True”

    • OleDbConnection(inhoud afhankelijk van OleDb Provider)
      • Hard gecodeerd
        • Microsoft Access 2000

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=physical path to mdb

file;Password=password;User ID=userID;

        • SQL Server

"Provider=SQLOLEDB;Data Source=name or IP adress server;Password=password;

User ID=userID;Initial Catalog=databasename;Integrated Security=True”

        • Oracle

"Provider=MSDAORA;Data Source=name server;Password=password;User ID=userID;

Initial Catalog = databasename;

Visual Basic.NET

connecteren met een database4
Connecteren met een database
    • Via UDL file (Microsoft Data Link file)
      • Ga naar Windows Explorer
      • Dubbelklik bin directory van project
      • Rechtermuisklik in rechter venster > File > New > Text document
      • Rename gecreeerde tekst bestand. Pas extensie aan in .udl, en geef een duidelijke naam bvb Northwind.udl
      • Dubbelklik bestand. Het Data Link Property dialoogvenster verschijnt.
      • Openen van connection o.b.v. Udl file

"File Name=" & Application.StartupPath & "\northwind.udl“

  • Opmerking : maak zoveel mogelijk gebruik van trusted verbindingen (via Windows verificatie)

Visual Basic.NET

connecteren met een database5
Connecteren met een database
  • Connection Properties
      • Database of Initial Catalog: de naam van de database die moet worden geopend zodra de verbinding tot stand komt
      • DataSource : de naam server of locatie van bestand dat de database bevat
      • ConnectionString : connectionstring gebruikt voor maken verbinding
      • ConnectionTimeOut : de maximale tijd(in seconden) dat het connection object probeert verbinding te maken vooraleer een foutmelding verschijnt (default 15 sec)
      • Provider (enkel igv OleDbConnection) : Naam OleDB Data Provider
      • State : status huidige connectie
        • Closed : gesloten. (Status na uitvoeren Close methode)
        • Open : open en actief (Status na uitvoeren Open methode)
        • Broken : connectie is niet meer bruikbaar (netwerk probleem,...)
        • Connecting : connectie is bezig verbinding te maken
        • Executing : de connection voert een Command uit
        • Fetching : De connection haalt gegevens op

Opm : allen read-only, behalve connectionstring

Visual Basic.NET

connecteren met een database6
Connecteren met een database
  • Connection Events
      • StateChanged : als toestand van object Connection verandert
        • Geeft een StateChangeEventArgs door aan handler met 2 eigenschappen (mogelijke waarden idem property State)
          • CurrentState
          • OriginalState
        • Voorbeeld

Dim theMessaqe as String

theMessage = “The connection is changing from “ & _

e.OriginalState.ToString & “ to “ & _

e.CurrentState.ToString

Messagebox.Show(theMessage)

Visual Basic.NET

connecteren met een database7
Connecteren met een database
  • Opvangen van fouten

Try

oConn = New OleDbConnection()

oConn.connectionstring =“Provider=Microsoft.Jet.OLEDB.4.0;Data Source =“ & Application.StartUpPath & “\northwind.mdb”

oConn.Open()

Catch ex As OleDbException

Messagebox.Show(ex. Message)

Next

End Try

Visual Basic.NET

connecteren met een database8
Connecteren met een database
  • Tip voor maken van een verbinding tijdens het ontwerpen
    • Open de Server Explorer
    • Klik op de knop Connect to Database. Het Data Link Property dialoogvenster verschijnt
    • Na instellen van Provider en Connection details, klik op OK. De connectie wordt toegevoegd aan de Server Explorer
    • Nu kan je de inhoud van db bekijken en eventueel via drag drop een connection object op form aanmaken

Visual Basic.NET

uitvoeren van sql instructie
Uitvoeren van SQL instructie

Data Provider

1.

Connection

Object

Uitvoeren

SQL statement

2.

Command

Object

  • Uitvoeren SQL (SELECT, INSERT, UPDATE, DELETE, DDL of DCL) of Stored Procedure : Command object
  • Is .NET Data Provider afhankelijk
    • SQLCommand
    • OleDbCommand

Visual Basic.NET

uitvoeren van sql instructie1
Uitvoeren van SQL instructie
  • Creatie Command object

Dim oCmd As New OleDbCommand()

  • Opgave van het uit te voeren SQL Statement of Stored Procedure

Dim strSQL as String

strSQL = "select categoryid, categoryName from categories“

oCmd.CommandText = strSQL

oCmd.CommandType = CommandType.Text

  • Opgave van connectie waarop de Command moet worden uitgevoerd

oCmd.Connection = oConn

  • Uitvoeren SQL Statement of Stored Procedure
    • Igv Select

Dim oDR as OleDbDataReader

oDR = oCmd.ExecuteReader()

    • Igv Update, Insert, Delete (je krijgt geen resultaat terug)

oCmd.ExecuteNonQuery()

Of verkort 2, 3 via constructor : oCmd = New OleDbCommand(strSQL,oConn)

Visual Basic.NET

uitvoeren van sql instructie2
Uitvoeren van SQL instructie
  • Command properties
    • CommandText : de SQL instructie of stored procedure die moet worden uitgevoerd
    • CommandTimeOut : de wachttijd(in seconden) op een reactie van de gegevensbron
    • CommandType : geeft aan hoe de Commandtext property geinterpreteerd moet worden. Mogelijke waarden : Text(default), TableDirect, StoredProcedure
    • Connection : het connection object waarop de Data Command moet worden uitgevoerd
    • Parameters : de verzameling Parameters voor SQL instructie of Stored Procedure
    • Transaction : het object Transaction waarbinnen de opdracht wordt uitgevoerd
    • UpdatedRowSource : bepaalt hoe de resultaten worden toegepast op een rij als de Command wordt gebruikt door de methode Update van de DataAdapter

Visual Basic.NET

uitvoeren van sql instructie3
Uitvoeren van SQL instructie
  • Uitvoeren van Query of stored procedure
    • Via de Command methodes
      • ExecuteNonQuery : voert een opdracht op Connection uit en geeft het aantal rijen terug dat daardoor wordt beïnvloed; Gebruik dit wanneer SQL statement geen resultaat retourneert nl bij INSERT, UPDATE of DELETE
        • Voorbeeld SQL Statements
          • UPDATE Customers SET CompanyName = 'NewCompanyName' WHERE CustomerID = 'ALFKI'
          • INSERT INTO Customers (CustomerID, CompanyName)VALUES ('NewID', 'NewCustomer')
          • DELETE FROM Customers WHERE CustomerID = 'ALFKI'

Visual Basic.NET

uitvoeren van sql instructie4
Uitvoeren van SQL instructie
    • Dim oConn As New OleDbConnection()
  • Dim oCmd As OleDbCommand
  • Dim strSQL As String
  • Dim strConn As String
  • ‘Maken database verbinding
  • strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
  • Application.StartupPath & "\northwind.mdb"
  • oConn.Connectionstring = strConn
  • oConn.Open()
  • ‘Creatie SQL Statement
  • strSQL = "UPDATE Customers"
  • strSQL &= " SET CompanyName = 'NewCompanyName'"
  • strSQL &= " WHERE CustomerID = 'ALFKI'"
  • oCmd = New OleDbCommand(strSQL, oConn)
  • ‘Uitvoeren SQL Statement
  • Dim intRecordsAffected As Integer
  • intRecordsAffected = oCmd.ExecuteNonQuery()
  • If intRecordsAffected = 1 Then
  • MessageBox.Show("Update succeeded")
  • Else 'Assume intRecordsAffected = 0
  • MessageBox.Show("Update failed")
  • End If
  • oConn.Close()
  • Voorbeeld programmacode

Visual Basic.NET

uitvoeren van sql instructie5
Uitvoeren van SQL instructie
  • ExecuteReader : voert de instructie uit op het Connection object en stelt een DataReader samen die het resultaat bevat.
    • Voorbeeld SQL Statement

"SELECT CustomerID, CompanyName FROM Customers"

Visual Basic.NET

uitvoeren van sql instructie6
Uitvoeren van SQL instructie
    • Dim oConn As OleDbConnection()
  • Dim oCmd As OleDbCommand
  • Dim strSQL As String
  • Dim strConn As String
  • ‘Maken database verbinding
  • strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
  • Application.StartupPath & "\northwind.mdb"
  • oConn = New OleDbConnection(strConn)
  • oConn.Open()
  • ‘Creatie SQL Statement
  • strSQL = "SELECT CustomerID, CompanyName FROM Customers"
  • oCmd = New OleDbCommand(strSQL, oConn)
  • ‘Uitvoeren SQL Statement en doorlopen resultaatset
  • Dim oDR As OleDbDataReader = oCmd.ExecuteReader()
  • Dim strMsg As String
  • While oDR.Read()
  • strMsg &= oDR.Item("CustomerID") & " – " & oDR.Item("CompanyName")
  • strMsg &= vbCrLf
  • End While
  • ‘Sluit DataReader!!!!!
  • oDR.Close()
  • MessageBox.Show(strMsg)
  • oConn.Close()
  • Voorbeeld programmacode

Visual Basic.NET

uitvoeren van sql instructie7
Uitvoeren van SQL instructie
  • ExecuteScalar
    • Als de query 1 resultaat retourneert
      • Count(*), Avg(UnitsInStock),...
    • Laat toe de waarde in 1 stap op te halen

Strsql=“select count(*) from Customers”

Dim oCcmd as new OleDbCommand(strSQL, oConn)

Dim aantal as integer

aantal=oCmd.executeScalar()

Visual Basic.NET

uitvoeren van sql instructie8
Uitvoeren van SQL instructie
  • Gebruik van parameters
    • 3 stappen
      • Parameters opgeven in de query
      • Parameters opgeven in de verzameling Parameters
      • Waarden aan parameters opgeven
    • Opgeven Query
      • In OleDbCommand : ?

oCmd.CommandText = “Select * from customers where customerID = ?”

      • In SqlDbCommand : benoemde parameters

oCmd.CommandText= “Select * from customers where customerID = @custID”

    • Toevoegen parameters aan verzameling Parameters

oCmd.Parameters.Add(“CustomerID", OleDbType.WChar, 5)

    • Instellen Parameterwaarden

oCmd.parameters(“CustomerID”).value = ....

Visual Basic.NET

uitvoeren van sql instructie9
Uitvoeren van SQL instructie
    • Dim oConn As OleDbConnection()
  • Dim oCmd As OleDbCommand
  • Dim strSQL As String
  • Dim strConn As String
  • ‘Maken database verbinding
  • strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
  • Application.StartupPath & "\northwind.mdb"
  • oConn = new OleDbConnection(strConn)
  • oConn.Open()
  • ‘Creatie SQL Statement en Parameters
  • strSQL = "SELECT CustomerID, CompanyName FROM Customers"
  • strSQL &= " WHERE CustomerID = ?"
  • oCmd = New OleDbCommand(strSQL, oConn)
  • oCmd.Parameters.Add("CustomerID", OleDbType.WChar, 5)
  • oCmd.Parameters("CustomerID").Value = "ALFKI“
  • ‘Uitvoeren SQL Statement en doorlopen resultaatset
  • Dim oDR As OleDbDataReader = oCmd.ExecuteReader()
  • Dim strMsg As String
  • While oDR.Read()
  • strMsg &= oDR.Item("CustomerID") & " – " & oDR.Item("CompanyName")
  • strMsg &= vbCrLf
  • End While
  • oDR.Close()
  • MessageBox.Show(strMsg)
  • oConn.Close()
  • Voorbeeld programmacode

Visual Basic.NET

uitvoeren van sql instructie10
Uitvoeren van SQL instructie
  • Voorbeeld : Product Information
    • Maak nieuwe Windows Applicatie met naam Products
    • Creëer form
    • Codeer Load event van form

Private Sub frmProduct_Load( ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

ListLoad()

End Sub

    • Codeer ListLoad procedure

Visual Basic.NET

uitvoeren van sql instructie11
Uitvoeren van SQL instructie

Private Sub ListLoad()

Dim oConn As OleDbConnection

Dim oCmd As OleDbCommand

Dim oDr As OleDbDataReader

Dim strSQL As String = "Select ProductName from Products"

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & ....

Try

oConn = New OleDbConnection(strConn)

oCmd = New OleDbCommand(strSQL, oConn)

oConn.Open()

oDr = oCmd.ExecuteReader()

lstProducts.Items.Clear()

Do While oDr.Read()

lstProducts.Items.Add(oDr.Item("ProductName"))

Loop

oDR.Close()

Catch ex As OleDbException

MessageBox.Show(ex.Message)

Finally

If (Not oConn Is Nothing) AndAlso (oConn.State = ConnectionState.Open) Then oConn.close()

End Try

End Sub

Visual Basic.NET

lezen van data de datareader
Lezen van Data : De DataReader
  • Kenmerken
    • DataReader is forward-only en read-only data
    • Kan slechts 1 keer gebruikt worden
    • Rijen worden 1/1 in geheugen geladen
    • DataReader kan niet gebruikt worden als DataSource!!
  • Afhankelijk van .NET Data Provider
  • Hoe gebruiken?
    • Call Command.ExecuteReader
    • Itereer door data met DataReader.Read
    • Lees Kolom data
    • Sluit DataReader!!!!!

Data Provider

1.

Connection

Object

Uitvoeren

SQL statement

2.

Command

Object

3.

DataReader

Object

Visual Basic.NET

de datareader
De DataReader
  • Creatie DataReader

Dim oDRAs OleDbDataReader

....

oDR=oCmd.ExecuteReader()

  • Doorlopen van DataReader

Do While oDR.Read

Messagebox.Show(oDR(0).ToString & ...)

Loop

  • Sluiten DataReader (niet vergeten!!)

oDR.Close()

Opmerking : Zolang DataReader object niet afgesloten, kan geen enkele SQL query nog worden uitgevoerd gebruik makend van bijhorend connection object

Visual Basic.NET

de datareader1
De DataReader
  • Ophalen van gegevens uit DataReader
    • Via de collectie van Get methodes (meest performant)
      • GetString, GetInt16, GetInt32, GetDateTime,...
      • Get methodes hebben 1 parameter : volgnr van veld
      • Bevat ook een IsNull methode (true als veld NULL bevat)

Do While oDR.Read

MessageBox.Show(oDR.GetInt32(0) & “ “ & oDR.GetString(1))

Loop

    • Via de Item property Array (via index of naam veld)

Do While oDR.Read

MessageBox.Show(cint(oDR(“categoryid”)) & “ “ & oDR(“categoryName”))

Loop

Visual Basic.NET

de datareader2
De DataReader
  • Voorbeeld Product Information - revised
    • DataReader kan je niet binden aan een listbox.
    • Hoe moet je op basis van de productnaam productgegevens terugvinden, indien productnaam niet uniek?
      • Oplossing : Maak een generische klasse ListItem
      • Klik Project > Add Class
      • Geef naam clsItemLists.vb
      • Geef code in
    • Gebruik die klasse in de listLoad procedure

Visual Basic.NET

slide29
Public Class clsItemList

Private mValue As String ‘bevat de text

Private mID As Integer ‘bevat de primaire sleutel

Public Sub New(ByVal strValue As String,ByVal intID As Integer)

mValue = strValue

mID = intID

End Sub

Property Value() As String

Get

Return mValue

End Get

Set(ByVal Value As String)

mValue = Value

End Set

End Property

Property ID() As Integer

Get

Return mID

End Get

Set(ByVal Value As Integer)

mID = Value

End Set

End Property

Public Overrides Function ToString() As String‘opgeroepen door listbox voor tonen van waarde object

Return mValue

End Function

End Class

Visual Basic.NET

slide30
Private Sub ListLoad()

Dim oConn As OleDbConnection()

Dim oCmd As OleDbCommand()

Dim oDr As OleDbDataReader

Dim oItem as clsItemList

Dim strSQL as String= “Select ProductID, ProductName from Products order by ProductName”

Dim strConn as String= “Provider=...

Try

oConn = new OleDbConnection(strConn)

oCmd = new OleDbCommand(strSQL,oConn)

oConn.Open()

oDr = oCmd.ExecuteReader()

lstProducts.Items.Clear()

Do while oDr.Read()

oItem = New clsItemList(oDr.Item(“ProductName”).ToString(), cint(oDR.Item(“ProductID”)),)

lstProducts.Items.Add(oItem)

Loop

oDr.Close

If lstProducts.Items.Count > 0 then lstproducts.SetSelected(0,True)

Catch ex As OleDbException

MessageBox.Show(ex.Message)

Finally

If (Not oConn Is Nothing) AndAlso (oConn.State = ConnectionState.Open) Then oConn.close()

End Try

End Sub

Visual Basic.NET

de dataadapter
De DataAdapter
  • Brug tussen gegevensbron en DataSet object. SQLDataAdapter
    • OleDbDataAdapter
    • SqlDataAdapter
  • DataSet heeft nooit een live connection met datasource. De DataAdapter connecteert met datasource, voert query uit en geeft resultaat door aan DataSet of voert wijzigingen uit DataSet uit op dataSource

Data Provider

Connection

Object

Uitvoeren

SQL statement

Command

Object

DataSet

DataTables

DataAdapter

Object

Visual Basic.NET

de dataadapter1
De DataAdapter
  • Ophalen van data -> vullen van een dataset
    • DataAdapter
      • Fill : voert select statement uit en slaat resultaat op in DataTable in DataSet
      • Update : voert wijzigingen in DataTable in DataSet door in database
    • Je hebt geen open connectie nodig. De Fill/update methode opent de connectie, manipuleert data en sluit de connectie
    • Creatie DataAdapter

Dim strConn As String

strConn = “Provider=Microsoft.Jet.OLEDB.4.0;”

strConn &= “Data Source =“ & Application.StartUpPath & “\northwind.mdb”

Dim oConn As New OleDbConnection(strConn)

Dim oCmd As New OleDbCommand(“Select * from Customers”, oConn)

oDA = New oleDbDataAdapter()

oDA.SelectCommand = oCmd

of verkort via DataAdapter Constructor

Dim strConn As String = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source ...”

Dim oConn As New OleDbConnection(strConn)

Dim strSQl as String = “Select * from Customers”

Dim oDA = New oleDbDataAdapter(strSQl, oConn)

Visual Basic.NET

de dataadapter2
De DataAdapter
  • Vullen van DataSet

Dim oDs as New DataSet()

oDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

oDa.Fill(oDs,”Customers”)

    • De connectie met de database zal enkel bestaan tijdens de uitvoering van de Fill.
    • Het schema van de DataTable Customers wordt automatisch gegenereerd, en is gebaseerd op de definitie van de tabel in de data source.
    • In DataSet NorthWind wordt tabel gecreëerd met naam Customers (en gemapped met tabel Customer)

Visual Basic.NET

de dataadapter3
De DataAdapter

XML Web Services

Data Source

Client

Request data

SQL query

1

2

Results

XML

3

4

SQL updates

Updated XML

5

6

DataSet

DataSet

Visual Basic.NET

de dataset
De DataSet

DataSet

Object

Collection

Table

Tables

Column

Columns

Constraint

Constraints

Row

Rows

Relation

Relations

  • Disconnected verzameling gegevens bijgehouden in de cache.
  • Bevat een collectie van tabellen, relaties en constraints in XML formaat.
  • Staat altijd los van een gegevensbron

Visual Basic.NET

de dataset1
De DataSet
  • Tables : collectie van table objecten
  • Table : een tabel bestaande uit kolommen, rijen en constraints
    • Je kan meerdere tabellen in 1 dataset laden

Dim oConn As New OleDbConnection(strConn)

Dim daCustomers, daOrders As OleDbDataAdapter

daCustomers = New OleDbDataAdapter("SELECT ... FROM Customers", oConn )

daOrders = New OleDbDataAdapter("SELECT ... FROM Orders", oConn )

Dim ds As New DataSet()

daCustomers.Fill(ds)

daOrders.Fill(ds)

Visual Basic.NET

de dataset2
De DataSet
  • Columns : is een collectie van DataColumn objecten
  • DataColumn : definiëren schema van DataTable

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0; =..."

Dim strSQL As String = "SELECT * FROM Customers"

Dim oConn As New OleDbConnection(strConn)

Dim oDa As New OleDbDataAdapter(strSQL, oConn)

Dim oDs As New DataSet()

oDa.Fill(oDs, "Customers")

Dim oTbl As DataTable = oDs.Tables("Customers")

Dim strMsg As String

strMsg = "Column information for " & oTbl.TableName & " DataTable" & vbCrLf

Dim col As DataColumn

For Each col In oTbl.Columns

strMsg &= col.ColumnName & " - " & col.DataType.ToString & vbCrLf

Next col

MessageBox.Show(strMsg)

Visual Basic.NET

de dataset3
De DataSet
  • Rows Collection : alle geretourneerde rijen in DataTable
    • Index : ophalen van specifieke rij
    • Count : aantal rijen in dataTable
    • Doorlopen van de rijen

For each row in oDs.Tables(“Customers”)

....

Next

  • DataRow Object : Gegevens van 1 rij in DataTable
    • Via Geparametriseerde item property haal je waarde uit 1 veld op.
    • Voorbeeld 1

Dim strMsg As String

Dim oTbl As DataTable = oDs.Tables("Customers")

Dim row As DataRow = oTbl.Rows(0)

strMsg = "CustomerID = " & row.("CustomerID") & vbCrLf

strMsg &= "CompanyNameID = " & row("CompanyName")

MessageBox.Show(strMsg)

Visual Basic.NET

de dataset4
De DataSet
  • Voorbeeld 2 : Tonen van de data in Listbox
    • Doorlopen van rijen

Private Sub DisplayCustomers

Dim dr as DataRow

For each dr in oDS.Tables(“Customers”).Rows

lstCustomers.Items.Add(dr(“CustomerName”))

Next

End Sub

    • Of via binding

lstCustomers.DataSource = oDS.Tables(“Customers”)

lstCustomers.DisplayMember = “CustomerName” ‘opgepast hoofdlettergevoelig

lstCustomers.ValueMember = “CustomerID”

Visual Basic.NET

de dataset5
De DataSet
  • Aanpassen inhoud van DataSet (NOG NIET DE DB!!!)
    • Toevoegen van een nieuwe DataRow

Dim row As DataRow =oDS.Tables("Customers").NewRow

row("CustomerID") = "ALFKI"

...

oDS.Tables("Customers").Rows.Add(row)

    • Updaten van een DataRow

Dim rowCustomer As DataRow

rowCustomer = oDS.Tables("Customers").Rows.Find("ANTON")

If rowCustomer Is Nothing Then

'Customer not found!

Else rowCustomer.BeginEdit

rowCustomer("CompanyName") = "NewCompanyName“

rowCustomer("ContactName") = "NewContactName“

rowCustomer.EndEdit

End If

Visual Basic.NET

de dataset6
De DataSet
  • Verwijderen van een rij

Dim rowCustomer As DataRow

rowCustomer = oDS.Tables("Customers").Rows.Find("ALFKI")

oDS.Tables("Customers").Delete

  • Null waarden
    • Testen of een kolom Null waarde bevat

Dim rowCustomer As DataRow

rowCustomer = ds.Tables("Customers").Rows.Find("ALFKI")

If IsDBNull(rowCustomer("Phone")) Then Console.WriteLine("It's Null")

‘Of

If rowCustomer.IsNull(“Phone”) then ....

    • Instellen van een Null waarde

Dim rowCustomer As DataRow

rowCustomer = ds.Tables("Customers").Rows.Find("ALFKI")

rowCustomer("Phone") = DBNull.Value

Visual Basic.NET

de dataset7
De DataSet
  • Updaten van de DataSource
    • Via Command objecten
    • Via DataAdapter
      • Generatie van update statements
        • .NET genereert de update statements in functie van het SELECT statement dmv CommandBuilder
          • Voorwaarde : Select statement moet primary key bevatten
          • Werkt met optimistische locking
          • Voorbeeld

Dim strConn As String = “Provider=Microsoft.Jet.OLEDB.4.0;...”

Dim oConn As New OleDbConnection(strConn)

Dim strSQl as String = “Select * from Customers”

Dim oDA = New oleDbDataAdapter(strSQl, oConn)

Dim oCB As New OleDbCommandBuilder(oDA)

        • Je codeert zelf de Update statements (is performanter), nl InsertCommand, UpdateCommand en DeleteCommand
      • Submitten van de updates
        • oDA.Update(oDS, “Customers”) ‘dataset en source table

Visual Basic.NET

de dataset8
De DataSet
  • Hoe gebeurt de update?
    • Elke rij bevat verschillende versies
      • Original : bevat de aanvankelijk in de rij geladen gegevens
      • Default : bevat de standaardwaarden voor de rij (bepaald door de eigenschap DefaultValue van de kolommen). Als er geen defaultwaarden zijn gespecifieerd bevat deze versie dezelfde gegevens als de Original.
      • Current : bevat de bijgewerkte gegevens voor alle kolommen die zijn bijgewerkt en de gegevens uit de versie Original voor de kolommen die niet zijn bijgewerkt
      • Proposed : Nadat BeginEdit is aangeroepen voor een rij en voordat EndEdit opf CancelEdit worden aangeroepen. Als CancelEdit wordt aangeroepen , wordt de versie proposed verwijderd. EndEdit past de versie Proposed toe op de Current

Visual Basic.NET

de dataset9
De DataSet
  • Elke rij bevat een rijstatus. Property RowState
    • Added : rij toegevoegd aan de tabel voordat AcceptChanges wordt aangeroepen. Als AcceptChanges werd aangeroepen wordt rowstate ingeteld op Unchanged
    • Deleted : rij waarvoor methode Delete werd aangeroepen
    • Detached : een nieuwe rij die nog niet is toegevoegd aan de DataRowCollection (NewRow) of nog een rij die werd verwijderd uit een DataRowCollection (via Remove) maar nog niet werd gewist.
    • Modified : rij waarvan de gegevens werden verwijderd, maar waarvoor de methode AcceptChanges nog niet is aangeroepen
    • Unchanged : rij waarvoor de gegevens niet zijn gewijzigd sinds AcceptChanges voor het laatst werd aangeroepen.

Visual Basic.NET

de dataset10
De DataSet
  • Met de versie en status van een DataRow bevat een DataSet voldoende informatie om de gemaakte mutaties te laten persisteren in een database. De dataAdapter maakt gebruikt van de 3 Command objecten om voor een bepaalde DataRow de overeenkomstige operatie uit te voeren op db.
    • Stuur enkel de gewijzigde rijen naar de database
      • Dim gewijzigdeDs as DataSet
      • If ds.HasChanges then
        • gewijzigdeDs = ds.GetChanges()
        • Dim oCB as New OleDbCommandBuilder(oDa)
        • Da.ContinueUpdateOnError = true
        • Da.Update(dswijzigingen,”Customers”)
    • Voeg originele dataset samen met de ververste wijzigingen
      • Ds.Merge(dsWijzigingen, true)
    • Controleer op errors

If ds.HasErrors

Dim row as DataRow

For each row in ds.GetErrors()

Console.writeline(“fout bij updaten “ & row.rowerror & “ voor “ & row(“customerid”) & “ “ & row(“companyname”,DataRowVersion.Current) & “ “ & row(“companyname”, DataRowVersion.Original”)

Next

Visual Basic.NET

dataset
DataSet
  • Je kan wijzigingen in gegevens in dataset accepteren of annuleren of opnieuw proberen te updaten.
    • Ds.RejectChanges
    • Ds.AcceptChanges
  • Refreshen van data in de DataSet
    • De dataTable moet een primary key bevatten
      • Indien niet, zal de refresh de records die van de database komen acteraan toevoegen
      • 2 manieren om primary key in te stellen
        • Set DataAdapter.MissingSchema = AddWithKey => Eenvoudig, geen codering, PK komt van database
        • Manueel toevoegen aan DataTable => betere performantieBetter performance
    • Voer de DataAdapter.Fill terug uit
      • De bestaande records zullen worden upgedate
    • Als je de bestaande wijzigingen in je Dataset wenst te behouden
      • Vull een nieuwe DataSet
      • Merge wijzigingen en zet PreserveChanges = true

Visual Basic.NET

de dataset11
De DataSet

Visual Basic.NET

de dataset12
De DataSet
  • Demo + bespreking van de code

Visual Basic.NET

slide49
Boeken en info
  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/usingadonet.asp

Visual Basic.NET

programming guidelines
Programming guidelines
  • DataReader or DataSet
    • DataSet supports caching and serialization
    • DataReader has best performance
    • DataReader is use-once object
    • Comparable to SAX or DOM
  • Managed provider to use
    • ODBC: for old ODBC drivers
    • OLE DB: for general OLEDB connections
    • SQL Server: for SQL Server only connections

Visual Basic.NET

de datareader3
De DataReader
  • Zoeken van waarden in een comboBox
    • Pas Load event Form aan
    • Codeer de procedures SupplierLoad en CategoryLoad
  • Private Sub frmProduct_Load( ByVal sender As System.Object, _
  • ByVal e As System.EventArgs) Handles MyBase.Load
  • ' Load Suppliers
  • SupplierLoad()
  • ' Load Categories
  • CategoryLoad()
  • ' Load List Box of Products
  • ListLoad()
  • End Sub

Visual Basic.NET

slide52
En verder
    • Performantie opdrijven door
      • Stored procedures
      • Zelf InsertCommand, UpdateCommand, DeleteCommand te creëeren en niet te werken met CommandBuilder
      • Typed DataSets (XML)

-> Maar dit behoort tot de leerstof van volgend jaar.

Visual Basic.NET

uitvoeren van sql instructie12
Uitvoeren van SQL instructie
  • Voorbeeld 1 : SQL Tester
    • Maak nieuwe Windows Applicatie met naam SQLTester
    • Creëer form

Visual Basic.NET

uitvoeren van sql instructie13
Uitvoeren van SQL instructie
  • Dubbelklik Connect knop en schrijf volgende code

Opm : sluit altijd de connectie af. Wacht niet tot object out of scope gaat. Close geeft de connectie terug aan de pool, zodat de connectie kan herbruikt worden door een andere procedure

Private Sub btnConnect_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click

Dim oConn As OleDbConnection

Dim strConn As String

Try

oConn = New OleDbConnection()

strConn = “Provider=Microsoft.Jet.OLEDB.4.0;”

strConn &= “Data Source =“ & Application.StartUpPath & “\northwind.mdb”

oConn.ConnectionString = strConn

oConn.Open()

MessageBox.Show("Connection Open", "btnConnect_Click()")

oConn.Close() ‘close the connection

Catch oExcept As Exception

MessageBox.Show(oExcept.Message, "btnConnect_Click()")

End Try

End Sub

Visual Basic.NET

uitvoeren van sql instructie14
Uitvoeren van SQL instructie

Private Sub btnExecute_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExecute.Click

Dim oCmd As OleDbCommand

Dim strConn As String

Try

strConn = “Provider=Microsoft.Jet.OLEDB.4.0;”

strConn &= “Data Source =“ & Application.StartUpPath & “\northwind.mdb”

oCmd = New OleDbCommand()

oCmd.Connection = New OleDbConnection(strConn)

oCmd.Connection.Open()

oCmd.CommandText = txtSQL.Text' Assign the SQL to the Command Object

' Execute the SQL, Return Number of Records Affected

txtRows.Text = oCmd.ExecuteNonQuery().ToString()

MessageBox.Show("SQL statement succeeded", "btnExecute_Click()")

oCmd.Connection.Close()

Catch oExcept As Exception

txtRows.Text = 0.ToString()

MessageBox.Show("Error executing SQL: " & oExcept.Message, "btnExecute_Click()")

End Try

End Sub

  • Dubbelklik Execute knop en schrijf volgende code

Visual Basic.NET

uitvoeren van sql instructie15
Uitvoeren van SQL instructie
  • Opmerking : Maak een ConnectionStringBuild functie

Private Function ConnectStringBuild() As String

Dim strConn As String

strConn &= “Provider=Microsoft.Jet.OLEDB.4.0;”

strConn &= “Data Source =“ & Application.StartUpPath & “\northwind.mdb”

Return strConn

End Function

Visual Basic.NET

de datareader4
De DataReader
  • Voorbeeld Product Information - revised
    • DataReader kan je niet binden aan een listbox.
    • Hoe moet je op basis van de productnaam productgegevens terugvinden, indien productnaam niet uniek?
      • Oplossing : Maak een generische klasse ListItem
      • Klik Project > Add Class
      • Geef naam clsItemLists.vb
      • Geef code in
    • Gebruik die klasse in de listLoad procedure

Visual Basic.NET

slide59
Public Class clsItemList

Private mValue As String ‘bevat de text

Private mID As Integer ‘bevat de primaire sleutel

Public Sub New(ByVal strValue As String,ByVal intID As Integer)

mValue = strValue

mID = intID

End Sub

Property Value() As String

Get

Return mValue

End Get

Set(ByVal Value As String)

mValue = Value

End Set

End Property

Property ID() As Integer

Get

Return mID

End Get

Set(ByVal Value As Integer)

mID = Value

End Set

End Property

Public Overrides Function ToString() As String‘opgeroepen door listbox voor tonen van waarde object

Return mValue

End Function

End Class

Visual Basic.NET

slide60
Private Sub ListLoad()

Dim oCmd As OleDbCommand()

Dim oDr As OleDbDataReader

Dim oItem as clsItemList

Dim strSQL as String

Dim strConn as Strings= ConnectStringBuild()

strSQL = “Select ProductID, ProductName from Products order by ProductName”

Try

oCmd = new OleDbCommand()

With oCmd

.Connection = New OleDbConnection(strConn)

.Connection.Open()

.CommandText = strSQL

oDr = .ExecuteReader()

End With

lstProducts.Items.Clear()

Do while oDr.Read()

oItem = New clsItemList(oDr.Item(“ProductName”).ToString(), cint(oDR.Item(“ProductID”)),)

lstProducts.Items.Add(oItem)

Loop

If lstProducts.Items.Count > 0 then lstproducts.SetSelected(0,True)

Catch ex As OleDbException

MessageBox.Show(ex.Message)

End Try

End Sub

Visual Basic.NET

de datareader5
De DataReader
  • Tonen van de Product Detail informatie
    • Dubbelklik lstProducts en voeg code toe
    • Voeg procedure ShowDetail toe
      • Opmerkingen
        • Ctype : converteert van 1 data type naar een ander
        • Converteert een object type in een clsItemList type

Private Sub lstProducts_SelectedIndexChanged( _

ByVal sender As Object, ByVal e As System.EventArgs) _

Handles lstProducts.SelectedIndexChanged

ShowDetail()

End Sub

Visual Basic.NET

de datareader6
De DataReader

Private Sub ShowDetail()

Dim oCmd As OleDbCommand

Dim oDR As OleDbDataReader

Dim oItem As clsItemList

Dim strSQL As String

Dim strConn As String

strConn = ConnectStringBuild()

oItem = CType(lstProducts.SelectedItem, clsItemList) ' Get Primary Key From List Box

strSQL = "SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued "

strSQL &= " FROM Products "

strSQL &= " WHERE ProductID = " & oItem.ID

Try

oCmd = New OleDbCommand()

With oCmd

.Connection = New OleDbConnection(strConn)

.Connection.Open()

.CommandText = strSQL

oDR = .ExecuteReader()

End With

Visual Basic.NET

de datareader7
De DataReader

If oDR.Read() Then

With oDR

txtID.Text = .Item("ProductID").ToString()

txtName.Text =.Item("ProductName").ToString()

txtQty.Text = .Item("QuantityPerUnit").ToString()

txtPrice.Text = .Item("UnitPrice").ToString()

txtInStock.Text = .Item("UnitsInStock").ToString()

txtOnOrder.Text = .Item("UnitsOnOrder").ToString()

txtReorder.Text = .Item("ReorderLevel").ToString()

chkDisc.Checked = CType(.Item("Discontinued"), Boolean)

End With

End If

oDR.Close()

oCmd.Connection.Close()

Catch oException As Exception

MessageBox.Show(oException.Message)

End Try

End Sub

Visual Basic.NET

de datareader8
De DataReader
  • Vullen van de comboboxen Supplier en Category
    • Pas Load event Form aan
    • Codeer de procedures SupplierLoad en CategoryLoad
  • Private Sub frmProduct_Load( ByVal sender As System.Object, _
  • ByVal e As System.EventArgs) Handles MyBase.Load
  • ' Load Suppliers
  • SupplierLoad()
  • ' Load Categories
  • CategoryLoad()
  • ' Load List Box of Products
  • ListLoad()
  • End Sub

Visual Basic.NET

de datareader9
De DataReader

Private Sub CategoryLoad()

Dim oCmd As OleDbCommand

Dim oDR As OleDbDataReader

Dim oItem As clsItemList

Dim strSQL As String

Dim strConn As String

strConn = ConnectStringBuild()

strSQL = "SELECT CategoryID, CategoryName FROM Categories"

Try

oCmd = New OleDbCommand()

With oCmd

.Connection = New OleDbConnection(strConn)

.Connection.Open()

.CommandText = strSQL

' Closes connection when closing DataReader object

oDR = .ExecuteReader(CommandBehavior.CloseConnection)

End With

Visual Basic.NET

de datareader10
De DataReader

Do While oDR.Read()

oItem = New clsItemList(oDR.Item("CategoryName").ToString(), CInt(oDR.Item("CategoryID")))

cboCategory.Items.Add(oItem)

Loop

oDR.Close()

' No need to close this because of the CloseConnection on the ExecuteReader

'oCmd.Connection.Close()

Catch oExcept As Exception

MessageBox.Show(oExcept.Message)

End Try

End Sub

Visual Basic.NET

de datareader11
De DataReader
  • Updaten van een rij

Private Sub DataUpdate()

Dim oCmd As OleDbCommand

Dim strSQL As String

Dim intRows As Integer

strSQL = "UPDATE Products SET "

strSQL &= "ProductName = " & Str2Field(txtName.Text) & ", "

strSQL &= "SupplierID = " & CType(cboSupplier.Items(cboSupplier.SelectedIndex), clsItemList).ID & ", "

strSQL &= "CategoryID = " &CType(cboCategory.Items(cboCategory.SelectedIndex), clsItemList).ID & ", "

strSQL &= "QuantityPerUnit = " & Str2Field(cboSupplier.Text) & ", "

strSQL &= "UnitPrice = " & txtPrice.Text & ", "

strSQL &= "UnitsInStock = " & txtInStock.Text & ", "

strSQL &= "UnitsOnOrder = " & txtOnOrder.Text & ", "

strSQL &= "ReorderLevel = " & txtReorder.Text & ", "

strSQL &= "Discontinued = " & CType(IIf(chkDisc.Checked, "1", "0"), String)

strSQL &= " WHERE ProductID = " & CType(lstProducts.SelectedItem, clsItemList).ID

Visual Basic.NET

de datareader12
De DataReader

Try

oCmd = New OleDbCommand()

With oCmd

.Connection = New OleDbConnection(ConnectStringBuild())

.Connection.Open()

.CommandText = strSQL

intRows = .ExecuteNonQuery()

If intRows <> 1 ThenMessageBox.Show("Did not insert row")

.Connection.Close()

End With

Catch oException As Exception

MessageBox.Show(oException.Message)

End Try

End Sub

Visual Basic.NET

de datareader13
De DataReader
  • String velden moeten tussen ‘ staan

Private Function Str2Field(ByVal strValue As String) As String

If strValue.Trim() = "" Then

Return "Null"

Else

Return "'" & strValue.Trim() & "'"

End If

End Function

Visual Basic.NET

de datareader14
De DataReader
  • Toevoegen van een rij

Private Sub DataInsert()

Dim oCmd As OleDbCommand

Dim strSQL As String

Dim intRows As Integer

strSQL = “INSERT INTO Products VALUES("

strSQL &= Str2Field(txtName.Text) & ", "

strSQL &= CType(cboSupplier.Items(cboSupplier.SelectedIndex), clsItemList).ID & ", "

strSQL &= CType(cboCategory.Items(cboCategory.SelectedIndex), clsItemList).ID & ", "

strSQL &= Str2Field(cboSupplier.Text) & ", "

strSQL &= txtPrice.Text & ", "

strSQL &= txtInStock.Text & ", "

strSQL &= txtOnOrder.Text & ", "

strSQL &= txtReorder.Text & ", "

strSQL &= CType(IIf(chkDisc.Checked, "1", "0"), String)

Visual Basic.NET

de datareader15
De DataReader
  • Schrappen van een rij

Private Sub DataDelete()

Dim oCmd As OleDbCommand

Dim strSQL As String

Dim intRows As Integer

strSQL = “DELETE FROM Products"

strSQL &= " WHERE ProductID = " & CType(lstProducts.SelectedItem, clsItemList).ID

Visual Basic.NET

de dataset13
De DataSet
  • Validatie van rijen in DataSet
    • Getypeerde dataset
    • Validatie Properties van de DataColumn
      • ReadOnly : kolom kan niet gewijzigd worden
      • AllowDBNull  : al dan niet verplicht in te vullen.
      • MaxLength  : maximaal aantal characters
      • Unique : kolom mag al dan niet duplicate waarden bevatten. ADO.NET throwt een ConstraintException.
    • The DataTable Object's Constraints Collection
      • UniqueConstraints : kan je ook instellen via DataColumn
      • PrimaryKey
      • ForeignKeyConstraints: kan je ook instellen via Relations

Visual Basic.NET

de dataset14
De DataSet
  • Instellen van die properties (null, maxlength) via

oDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

Visual Basic.NET

de dataset15
De DataSet
  • Formatteren van velden in gebonden controls
    • De Add methode retourneert een Binding object dat reageert op CM object events en die data moved tussen textbox en kolom waarmee tekstbox gebonden is.
    • Binding object heeft 2 events : Format en Parse
      • Format event : bij laden van data in textbox
      • Parse event : bij schrijven data in dataSet

Visual Basic.NET

handling identity columns
Handling Identity Columns
  • Problem: Identity values are only generated upon insert
  • Solution
    • Client values should not conflict with server values
      • Set AutoIncrement Seed and Step to -1 on DataTable
    • When doing the insert in the DB, retrieve the new AutoIncrement value
      • Modify the value in the inserted DataRow with the new one
    • In case of parent-child relations
      • Insert Parent rows before Child rows
      • Use UpdateRule.Cascade on DataRelation between Parent and Child

Visual Basic.NET

handling identity columns1
Handling Identity Columns
  • Solution (continued)
    • How do you retrieve the new Identity value ?
      • Do a “select scope_identity()” after insert statement
      • As an output parameter of a Insert Stored Procedure
    • How do you map the new Identity value to the DataRow?
      • Set DataAdapter.SelectCommand.UpdateRowSource
        • FirstReturnedRecord
          • maps fields of first returned record to inserted DataRow
        • OutputParameter
          • maps output parameters of stored procedure to inserted DataRow
        • Default is Both

Visual Basic.NET

handling identity columns2
Handling Identity Columns
  • Problem: Identity values are only generated upon insert
  • Easier Solution: make your primary key fields of the type UniqueIdentifier (GUID)
    • Can be generated in the client
      • No need to fetch back inserted value
      • Easier to program with

Visual Basic.NET

populating multiple datatables
Populating Multiple DataTables
  • Retrieve multiple results in a single call
    • Execute Batch statement or stored procdure
      • Map results to appropriate tables using tablemappings
  • Use ExecuteXmlReader to retrieve hierarchical results
      • Load with ReadXml using XmlReadMode.Fragment
  • Submit updates in batches
    • Sample batch update example available soon…
    • Or save as DiffGram and send to SqlXml
  • Dim adapter As New SqlDataAdapter( _
  • "SELECT * FROM customers; SELECT * FROM orders",cnn)
  • adapter.TableMappings.Add("Table1","Customer")
  • adapter.TableMappings.Add("Table2","Orders")
  • adapter.Fill(myDataSet)

Visual Basic.NET

looking up values in the dataset
Looking Up Values In The Dataset
  • Searching for Results within a DataSet
    • DataTable.Find() for searching on PK values
    • DataView.Select() for repeated non-PK queries
      • Sort DataView by search fields
      • DataView builds an index for sorted columns
  • Pass Table, filter, sort, RowState to constructor

Dim customer = customerTable.Rows.Find("GROSR")

  • Dim customerView As New DataView(customerTable)
  • customerView.Sort = "State"
  • Dim customers = customerView.FindRows("CA")
  • Dim view As New DataView( _
  • customerTable, _
  • "Country=USA", _
  • "Region", _ DataViewRowState.CurrentRows )

Visual Basic.NET

controlling how the xml is generated
Controlling How The XML Is Generated
  • DataSet lets you control how XML is generated
  • Name, Namespace properties on DataSet, DataTable, DataColumn
  • MappingType property on DataColumn defines how data is written
    • Element, Attribute, SimpleType, Hidden
  • Nested Property on DataRelation controls how children are written

' Write out CustomerID, OrderID as Attributes

ds.Tables("Customers").Columns("CustomerID").ColumnMapping = MappingType.Attribute

ds.Tables("Orders").Columns("OrderID").ColumnMapping = MappingType.Attribute

' Write out Orders as children of Customers

ds.Relations("cust_orders").Nested = True

<?xml version="1.0" standalone="yes"?>

<CustomerOrders>

<Customers CustomerID="GROSR">

<ContactName>Manuel Pereira</ContactName>

<Orders OrderID="10268">

<CustomerID>GROSR</CustomerID>

<OrderDate>1996-07-30</OrderDate>

</Orders>

</Customers>

</CustomerOrders>

Visual Basic.NET