1 / 80

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. ADO.NET. Het ADO.Net Object model. .NET Data Providers. Data Provider.

happy
Download Presentation

Addendum – ADO.NET

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. ADO.NET • Het ADO.Net Object model Visual Basic.NET

  3. .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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

  43. 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

  44. 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

  45. 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

  46. 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

  47. De DataSet Visual Basic.NET

  48. De DataSet • Demo + bespreking van de code Visual Basic.NET

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

  50. 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

More Related