ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Elaborazione di Franco Grivet Chin
Accesso ai dati su Relational Database Management Systems LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento.
DBMS (DataBase Management System)
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Introduzione alle basi di dati.
Sicurezza e concorrenza nelle basi di dati
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
ASP.NET – Data Binding Davide Vernole .NET MVP.
ASP.NET 2.0 Security Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l.
PHP.
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Connessione con MySQL.
Università degli Studi di Modena e Reggio Emilia
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Database nel Web Modulo Didattico: Francesca Platania
SQL Structured Query Language
Esercitazione con socket
OO.1 Marco Ronchetti - Java Sql package.
Basi di Dati II Sara Romano
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Il linguaggio ASP Lezione 3 La connessione al database con ASP
JDBC(TM) Database Access
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
File ad accesso casuale o random
Visual Basic e accesso ai DATABASE
SQL SERVER Modulo 4 Relatore: Stefano Furlan. Sommario Criteri per scrivere del buon codice TSQL Con cenni a Indici e performances Breve carrellata di.
ACCESS Introduzione Una delle necessità più importanti in informatica è la gestione di grandi quantità di dati. I dati possono essere memorizzati.
Realizzato da Roberto Savino
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
Basi di Dati e Sistemi Informativi SQL per Applicazioni Home page del corso:
Basi di Dati e Sistemi Informativi
BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio.
OBIETTIVI: Introduzione ai driver ODBC Creazione di alcune tabelle del database Creazione query Creazione report Lezione del 13/11/2009 Bray Francesco.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Accesso a basi di dati con ASP.
Pagine ASP parte 3 I data base Stefano Schacherl.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
IV D Mercurio DB Lezione 2
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Real World data access layers DataSet vs. Custom entities Pierre Greborio Software Architect – PEWay SrL Microsoft MVP – Solutions Architect.
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Sviluppo per Pocket PC con SQL Server CE 2.0 Fabio Santini Silvano Coriani.NET Developer Evangelist Microsoft Corporation.
MySQL Database Management System
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
Introduzione a SQL Server 2000 LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento di Informatica, Università.
© 2015 Giorgio Porcu - Aggiornamennto 28/03/2015 UdA 1A Database Progettazione Fisica G IORGIO P ORCU
+ Gestire la persistenza Nicolò Sordoni. + Meccanismi di persistenza dei dati In Windows Phone, come negli altri ambienti, abbiamo tre soluzioni principali.
Basi di Dati attive. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Definizione Una base di dati si dice attiva quando dispone.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Lezione 14 Tecniche di I/O Avanzate Obiettivi di apprendimento: A.Come lavorare con stream binari B.Lavorare con I datalog files C.Vantaggi e svantaggi.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Introduzione ad ADO.NET
Transcript della presentazione:

ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l.

SponsorSponsor

Struttura di ADO.NET ADO.NET è composto da: –Namespace System.Data: racchiude le primitive indipendenti dalla tipologia di base dati. Sono tutte disconnesseSono tutte disconnesse –.NET Managed Provider: implementano le primitive necessarie all’accesso a specifiche basi dati System.Data.SqlClient per l’accesso a SQL Server 7+System.Data.SqlClient per l’accesso a SQL Server 7+ System.Data.OleDb per connettersi usando un OleDb ProviderSystem.Data.OleDb per connettersi usando un OleDb Provider System.Data.OracleClientSystem.Data.OracleClient System.Data.OdbcSystem.Data.Odbc ADO.NET è composto da: –Namespace System.Data: racchiude le primitive indipendenti dalla tipologia di base dati. Sono tutte disconnesseSono tutte disconnesse –.NET Managed Provider: implementano le primitive necessarie all’accesso a specifiche basi dati System.Data.SqlClient per l’accesso a SQL Server 7+System.Data.SqlClient per l’accesso a SQL Server 7+ System.Data.OleDb per connettersi usando un OleDb ProviderSystem.Data.OleDb per connettersi usando un OleDb Provider System.Data.OracleClientSystem.Data.OracleClient System.Data.OdbcSystem.Data.Odbc

.NET Data Providers.NET Data Providers Implementano un insieme comune di interfacce esponendo le classi: –Connection: permette la connessione ad una base dati –Command: permette l’esecuzione di comandi SQL e Stored Procedure –DataReader: implementa un cursore forward- only, read-only, client side –DataAdapter: permette di “riempire” un contenitore disconnesso Implementano un insieme comune di interfacce esponendo le classi: –Connection: permette la connessione ad una base dati –Command: permette l’esecuzione di comandi SQL e Stored Procedure –DataReader: implementa un cursore forward- only, read-only, client side –DataAdapter: permette di “riempire” un contenitore disconnesso

Classe Connection Simile ad ADO old-style La Connection String: –Può essere specificata mediante un costruttore parametrico –Utilizza le stesse keyword di ADODB –Richiede attenzione nella specifica del Provider: SqlClient non lo accettaSqlClient non lo accetta System.Data.OleDb non supporta ODBCSystem.Data.OleDb non supporta ODBC Simile ad ADO old-style La Connection String: –Può essere specificata mediante un costruttore parametrico –Utilizza le stesse keyword di ADODB –Richiede attenzione nella specifica del Provider: SqlClient non lo accettaSqlClient non lo accetta System.Data.OleDb non supporta ODBCSystem.Data.OleDb non supporta ODBC Dim conSQL As New SqlConnection( ) conSQL.ConnectionString = "Integrated Security=True;" & _ "Data Source=LocalHost;Initial Catalog=Pubs;" conSQL.Open( ) Dim conSQL As New SqlConnection( ) conSQL.ConnectionString = "Integrated Security=True;" & _ "Data Source=LocalHost;Initial Catalog=Pubs;" conSQL.Open( )

Classe Command Possiamo creare un comando: –Mediante il costruttore –Mediante metodo CreateCommand Possiamo eseguire un comando mediante i metodi: –ExecuteReader: restituisce il DataReader in base ad una query –ExecuteScalar: è il metodo preferibile se il risultato è un singleton –ExecuteNonQuery: esegue un comando di azione Possiamo creare un comando: –Mediante il costruttore –Mediante metodo CreateCommand Possiamo eseguire un comando mediante i metodi: –ExecuteReader: restituisce il DataReader in base ad una query –ExecuteScalar: è il metodo preferibile se il risultato è un singleton –ExecuteNonQuery: esegue un comando di azione Dim commSQL As New SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText = "Select Count(*) from Authors" MessageBox.Show(commSQL.ExecuteScalar( ).ToString) Dim commSQL As New SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText = "Select Count(*) from Authors" MessageBox.Show(commSQL.ExecuteScalar( ).ToString)

Invocare Stored Procedure 1.Creare un oggetto Command 2.Impostare CommandType al valore StoredProcedure 3.Impostare la proprietà CommandText 4.Usare il metodo Add per creare e aggiungere parametri 5.Impostare la proprietà ParameterDirection 6.Invocare ExecuteReader 7.Consumare i record, e chiudere il DataReader 8.Leggere i parametri di output e il valore di ritorno 1.Creare un oggetto Command 2.Impostare CommandType al valore StoredProcedure 3.Impostare la proprietà CommandText 4.Usare il metodo Add per creare e aggiungere parametri 5.Impostare la proprietà ParameterDirection 6.Invocare ExecuteReader 7.Consumare i record, e chiudere il DataReader 8.Leggere i parametri di output e il valore di ritorno

Invocare Stored Procedure: un esempio

Usare un DataReader Per usare un DataReader, possiamo: –Avanzare alla posizione successiva mediante il metodo Read(), che ritorna True finchè non si sono consumati tutti i dati –Leggere i valori dei campi mediante la proprietà Item, oppure mediante i metodi GetXYZ() Un DataReader impegna la propria connessione, quindi: –Non è possibile utilizzarla per eseguire comandi –Dobbiamo ricordarci di chiuderlo mediante il metodo Close() Per usare un DataReader, possiamo: –Avanzare alla posizione successiva mediante il metodo Read(), che ritorna True finchè non si sono consumati tutti i dati –Leggere i valori dei campi mediante la proprietà Item, oppure mediante i metodi GetXYZ() Un DataReader impegna la propria connessione, quindi: –Non è possibile utilizzarla per eseguire comandi –Dobbiamo ricordarci di chiuderlo mediante il metodo Close()

Usare un DataReader: un esempio Dim commSQL As New SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText ="Select au_lname,au_fname from authors" Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do Until datRead.Read = False MessageBox.Show(datRead.GetString(1) & " " _ & datRead.GetString(0)) Loop datRead.Close( ) Dim commSQL As New SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText ="Select au_lname,au_fname from authors" Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do Until datRead.Read = False MessageBox.Show(datRead.GetString(1) & " " _ & datRead.GetString(0)) Loop datRead.Close( )

DataReaderDataReader

La classe DataSet E’ un contenitore disconnessoE’ un contenitore disconnesso E’ assimilabile ad un “vettore di matrici”E’ assimilabile ad un “vettore di matrici” Permette di specificare vincoli e relazioni tra i dati contenutiPermette di specificare vincoli e relazioni tra i dati contenuti E’ accessibile in scritturaE’ accessibile in scrittura Permette di propagare le modifiche su un DBPermette di propagare le modifiche su un DB Supporta nativamente la (de)serializzazione in formato XMLSupporta nativamente la (de)serializzazione in formato XML E’ un contenitore disconnessoE’ un contenitore disconnesso E’ assimilabile ad un “vettore di matrici”E’ assimilabile ad un “vettore di matrici” Permette di specificare vincoli e relazioni tra i dati contenutiPermette di specificare vincoli e relazioni tra i dati contenuti E’ accessibile in scritturaE’ accessibile in scrittura Permette di propagare le modifiche su un DBPermette di propagare le modifiche su un DB Supporta nativamente la (de)serializzazione in formato XMLSupporta nativamente la (de)serializzazione in formato XML

La classe DataSet ConstraintsConstraint ColumnsColumn DataSet TablesTable Oggetto Collezione RelationsRelation RowsRow

Popolare un DataSet Popolare un DataSet accedendo ad un RDBMSPopolare un DataSet accedendo ad un RDBMS Creare un DataSet in via programmaticaCreare un DataSet in via programmatica Popolare un DataSet accedendo ad un RDBMSPopolare un DataSet accedendo ad un RDBMS Creare un DataSet in via programmaticaCreare un DataSet in via programmatica Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") Dim datPubs As New DataSet( ) Dim tblAuthors As DataTable = New DataTable("authors") tblAuthors.Columns.Add("AuthorID", System.Type.GetType _ ("System.Int32")) Dim datPubs As New DataSet( ) Dim tblAuthors As DataTable = New DataTable("authors") tblAuthors.Columns.Add("AuthorID", System.Type.GetType _ ("System.Int32"))

La classe DataAdapter E’ il collegamento tra il “mondo” connesso e quello disconnessoE’ il collegamento tra il “mondo” connesso e quello disconnesso Può “riempire” un dataSet avvalendosi di una connessione chiusaPuò “riempire” un dataSet avvalendosi di una connessione chiusa E’ il collegamento tra il “mondo” connesso e quello disconnessoE’ il collegamento tra il “mondo” connesso e quello disconnesso Può “riempire” un dataSet avvalendosi di una connessione chiusaPuò “riempire” un dataSet avvalendosi di una connessione chiusa Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As New DataSet( ) adaptSQL.Fill(datPubs, "miaTabella") ' Accesso ai dati adaptSQL.Update (datPubs, "miaTabella") Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As New DataSet( ) adaptSQL.Fill(datPubs, "miaTabella") ' Accesso ai dati adaptSQL.Update (datPubs, "miaTabella")

DataSet multi Tabella Creare la prima tabellaCreare la prima tabella Creare le tabelle successiveCreare le tabelle successive Creare la prima tabellaCreare la prima tabella Creare le tabelle successiveCreare le tabelle successive Dim mySqlDataAdapter As New SqlDataAdapter(  "select * from customers", mySqlConnection) Dim myDataSet As New DataSet() mySqlDataAdapter.Fill(myDataSet, "Customers") Dim mySqlDataAdapter As New SqlDataAdapter(  "select * from customers", mySqlConnection) Dim myDataSet As New DataSet() mySqlDataAdapter.Fill(myDataSet, "Customers") mySqlDataAdapter.SelectCommand.CommandText =  "select * from orders" mySqlDataAdapter.Fill(myDataSet,"Orders") mySqlDataAdapter.SelectCommand.CommandText =  "select * from orders" mySqlDataAdapter.Fill(myDataSet,"Orders") Orders Customers DataSet: Data Tables

La classe DataTable Ogni elemento della proprietà Tables è una istanza della classe DataTable La classe DataTable espone le proprietà: –Columns: è una collezione di istanze di DataColumn –Rows: è una collezione di istanze della classe DataRow –Una istanza della classe DataRow: Mette a disposizione il contenuto delle proprie colonne mediante la proprietà ItemMette a disposizione il contenuto delle proprie colonne mediante la proprietà Item Ogni elemento della proprietà Tables è una istanza della classe DataTable La classe DataTable espone le proprietà: –Columns: è una collezione di istanze di DataColumn –Rows: è una collezione di istanze della classe DataRow –Una istanza della classe DataRow: Mette a disposizione il contenuto delle proprie colonne mediante la proprietà ItemMette a disposizione il contenuto delle proprie colonne mediante la proprietà Item

Usare una DataTable: un esempio Dim numeroRighe As Int32 = unaTabella.Rows.Count Dim indiceRiga As Int32 Dim unaRiga As DataRow For indiceRiga = 0 To numeroRighe - 1 unaRiga = unaTabella.Rows(indiceRiga) Dim nomeAutore As String = _ unaRiga.Item("au_fname").ToString() Next Dim numeroRighe As Int32 = unaTabella.Rows.Count Dim indiceRiga As Int32 Dim unaRiga As DataRow For indiceRiga = 0 To numeroRighe - 1 unaRiga = unaTabella.Rows(indiceRiga) Dim nomeAutore As String = _ unaRiga.Item("au_fname").ToString() Next

DataSetDataSet

DataSet: le Relazioni La classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelationLa classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelation Un oggetto DataRelation:Un oggetto DataRelation: –Definisce una associazione tra le colonne di differenti DataTable –definisce una associazione orientata alla navigazione sui dati –NON costituisce una constraint La classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelationLa classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelation Un oggetto DataRelation:Un oggetto DataRelation: –Definisce una associazione tra le colonne di differenti DataTable –definisce una associazione orientata alla navigazione sui dati –NON costituisce una constraint

Usare le Relazioni con i DataSet Creare relazioniCreare relazioni Accedere ai dati associatiAccedere ai dati associati Creare relazioniCreare relazioni Accedere ai dati associatiAccedere ai dati associati Dim relPubsTitle As New DataRelation("PubsTitles", _ datPubs.Tables("Publishers").Columns("pub_id"), _ datPubs.Tables("Titles").Columns("pub_id")) datPubs.Relations.Add(relPubsTitle) Dim relPubsTitle As New DataRelation("PubsTitles", _ datPubs.Tables("Publishers").Columns("pub_id"), _ datPubs.Tables("Titles").Columns("pub_id")) datPubs.Relations.Add(relPubsTitle) Dim PubRow, TitleRow As DataRow, TitleRows( ) As DataRow PubRow = datPubs.Tables("Publishers").Rows(0) TitleRows = PubRow.GetChildRows("PubsTitles") Dim PubRow, TitleRow As DataRow, TitleRows( ) As DataRow PubRow = datPubs.Tables("Publishers").Rows(0) TitleRows = PubRow.GetChildRows("PubsTitles")

Usare Constraint Il supporto alle constraint della classe DataSet permette di: –Creare constraint Classe ForeignKeyConstraintsClasse ForeignKeyConstraints Classe UniqueConstraintsClasse UniqueConstraints –Usare le constraint esistenti nel DB Il supporto alle constraint della classe DataSet permette di: –Creare constraint Classe ForeignKeyConstraintsClasse ForeignKeyConstraints Classe UniqueConstraintsClasse UniqueConstraints –Usare le constraint esistenti nel DB adaptSQL = New SqlClient.SqlDataAdapter("Select title_id" _ & ", title, type, price from titles", conSQL) adaptSQL.FillSchema(datPubs, schematype.Source, "Titles") adaptSQL.Fill(datPubs, "Titles") 'Operazioni sui dati adaptSQL.Fill(datPubs, "Titles") adaptSQL = New SqlClient.SqlDataAdapter("Select title_id" _ & ", title, type, price from titles", conSQL) adaptSQL.FillSchema(datPubs, schematype.Source, "Titles") adaptSQL.Fill(datPubs, "Titles") 'Operazioni sui dati adaptSQL.Fill(datPubs, "Titles")

Integrità Referenziale Una constraint ForeignKeyConstraint: –permette l’integrità referenziale Se la proprietà EnforceConstraints del DataSet è impostata a TrueSe la proprietà EnforceConstraints del DataSet è impostata a True –Determina le azioni effettuate nelle tabelle correlate Proprietà DeleteRule e UpdateRuleProprietà DeleteRule e UpdateRule Una constraint ForeignKeyConstraint: –permette l’integrità referenziale Se la proprietà EnforceConstraints del DataSet è impostata a TrueSe la proprietà EnforceConstraints del DataSet è impostata a True –Determina le azioni effettuate nelle tabelle correlate Proprietà DeleteRule e UpdateRuleProprietà DeleteRule e UpdateRuleAzioneAzioneDescrizioneDescrizione Cascade Cancella o aggiorna le righe correlate. E’ il default. SetNull Imposta a DBNull il valore delle righe correlate. SetDefault Imposta al DefaultValue il valore delle righe correlate. None Nessuna azione/modifica, viene sollevata una eccezione.

DataRelationDataRelation

Modificare i Dati Aggiungere righeAggiungere righe Modificare righeModificare righe Cancellare righeCancellare righe Aggiungere righeAggiungere righe Modificare righeModificare righe Cancellare righeCancellare righe Dim drNewRow As DataRow = datPubs.Tables("Titles").NewRow 'Populate columns datPubs.Tables("Titles").Rows.Add(drNewRow) Dim drNewRow As DataRow = datPubs.Tables("Titles").NewRow 'Populate columns datPubs.Tables("Titles").Rows.Add(drNewRow) drChangeRow.BeginEdit( ) drChangeRow("Title") = drChangeRow("Title").ToString & " 1" drChangeRow.EndEdit( ) drChangeRow.BeginEdit( ) drChangeRow("Title") = drChangeRow("Title").ToString & " 1" drChangeRow.EndEdit( ) datPubs.Tables("Titles").Rows.Remove(drDelRow)

Aggiornare il database Possiamo ripercuotere le modifiche effettuate al DataSet sul DB:Possiamo ripercuotere le modifiche effettuate al DataSet sul DB: –Esplicitando il comando di aggiornamento Generando automaticamente il comando di updateGenerando automaticamente il comando di update Possiamo ripercuotere le modifiche effettuate al DataSet sul DB:Possiamo ripercuotere le modifiche effettuate al DataSet sul DB: –Esplicitando il comando di aggiornamento Generando automaticamente il comando di updateGenerando automaticamente il comando di update Dim comm As New SqlClient.SqlCommand("Insert titles" & _ "(title_id, title, type) adaptSQL.InsertCommand = comm adaptSQL.Update(datPubs, "titles") Dim comm As New SqlClient.SqlCommand("Insert titles" & _ "(title_id, title, type) adaptSQL.InsertCommand = comm adaptSQL.Update(datPubs, "titles") Dim sqlCommBuild As New SqlCommandBuilder(adaptSQL) MsgBox(sqlCommBuild.GetInsertCommand.CommandText) adaptSQL.Update(datPubs, "titles") Dim sqlCommBuild As New SqlCommandBuilder(adaptSQL) MsgBox(sqlCommBuild.GetInsertCommand.CommandText) adaptSQL.Update(datPubs, "titles")

LinksLinks