caricato da nicola.bortoluzzi

ADO Net

Le applicazioni spesso devono comunicare con un database, sia per leggerne i dati che
per aggiornarli.
Il Framework .NET fornisce Microsoft ActiveX Data Objects.NET (ADO.NET) è un modello,
per l'accesso in lettura e scrittura ai database.
Il modello di ADO.NET non è altro che il flusso strutturato attraverso vari componenti
I dati memorizzati in un database vengono recuperati attraverso un oggetto chiamato
provider di dati.
Un'applicazione tipicamente accede ai dati tramite un DataSet o un DataReader.
Un DataSet è una struttura dati che permette di memorizzare una serie di tabelle in modo
da poter lavorare in maniera disconnessa.
Un DataReader fornisce invece un accesso ai dati in modalità di sola lettura e forwardonly.
D ATA P R O V I D E R
Il provider di dati in ADO.NET è costituito da quattro oggetti seguenti:
Oggetto
Descrizione
Connection
Utilizzato per configurare un collegamento a una fonte di dati.
Command
Un comando non è altro che un'istruzione SQL utilizzata per effettuare operazioni sui
dati
DataReader
DataAdapter
fornisce un accesso ai dati in modalità di sola lettura e forward-only.
E' un adattatore di dati che permette di trasferire i dati dal e verso database.
D ATA S E T
DataSet è una rappresentazione in memoria dei dati. Una volta caricati i dati tramite un
Adapter, lavora in modalità disconnessa.
Funziona come un database in memoria, e come un database ha tabelle, viste, primary
key etc...
La classe DataSet fa parte del namespace System.Data
Oggetto
Descrizione
DataTableCollection
Contiene tutte le tabelle del DataSet.
DataRelationCollection
Contiene i legami tra tabelle in un DataSet.
ExtendedProperties
Contiene informazioni aggiuntive.
DataTable
Contiene una tabella nel DataTableCollection di un DataSet.
DataRelation
Rappresenta una relazione nella DataRelationshipCollection del DataSet.
DataRowCollection
Contiene tutte le righe di un DataTable.
DataView
E' una vista personalizzata su un DataTable che può essere filtrato, ordinato etc...
PrimaryKey
Esso rappresenta la primary Key, ovvero la colonna che che identifica in modo univoco
una riga in un DataTable.
DataRow
E' una riga nella DataTable.
DataColumnCollection
DataColumn
Rappresenta tutte le colonne in un DataTable.
Rappresenta una colonna di un DataTable.
CONNECTION
Il Framework .NET fornisce diverse classi per il collegamento a un database, in base al
tipo di database a cui ci si collega.
•SqlConnection: per le connessioni a Microsoft SQL Server.
•OleDbConnection: per il collegamento a diversi database, come ad esempio Oracle o
anche Access.
Esempio 1: connessione a un database
Imports System.Data
Imports System.Data.SqlClient
Module esempioSql
Sub Main()
Dim connection As SqlConnection = New SqlConnection()
connection.ConnectionString = "Data Source=Nome_Server; Initial
Catalog=Nome_DB;Integrated Security=True"
connection.Open()
Dim adp As SqlDataAdapter = New SqlDataAdapter ("select * from Orders",
connection)
Dim ds As DataSet = New DataSet()
adp.Fill(ds)
End Sub
End Module
In questo semplice esempio, ci siamo collegati ad un database tramite la ConnectionString
ed abbiamo caricato i dati della tabella "Orders" in un DataTable.
Esempio 2: Creazione datatable in memoria
Imports System.Data
Imports System.Data.SqlClient
Module esempioSql
Sub Main()
Dim ds As DataSet = New DataSet()
Dim books As DataTable = New DataTable("MyBooks")
books.Columns.Add("id", Type.GetType("System.Int32"))
books.Columns.Add("year", Type.GetType("System.Int32"))
books.Columns.Add("title", Type.GetType("System.String"))
books.Columns.Add("author", Type.GetType("System.String"))
AddBook(1, 2016, "Titolo 1", "Autore 1")
AddBook(2, 2016, "Titolo 2", "Autore 2")
AddBook(3, 2016, "Titolo 3", "Autore 3")
AddBook(4, 2016, "Titolo 4", "Autore 4")
ds.Tables.Add(books)
End Sub
Private Sub AddBook(ByRef table As DataTable, ByRef id As Integer, ByRef year As
Integer, ByRef title As String, ByRef author As String)
Dim newrow As DataRow = table.NewRow()
newrow("id") = id
newrow("year") = year
newrow("title") = title
newrow("author") = author
table.Rows.Add(newrow)
End Sub
End Module
In questo esempio creiamo un DataTable contenente una tabella "books" ed inseriamo
dentro tale tabella 4 record.
Esempio 3: connessione con OleDB
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data" %>
<HTML>
<script language="VB" runat="server">
Private Sub btnFiltra_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Dim DS As DataSet
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbDataAdapter
Dim SelectCommand As String = "select * from utenti where cognome =
@cognome"
MyConnection = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data
Source=" & _
Server.MapPath("database/utenti.mdb"))
MyCommand = New OleDbDataAdapter(SelectCommand, MyConnection)
MyCommand.SelectCommand.Parameters.Add(New OleDbParameter("@cognome",
2))
MyCommand.SelectCommand.Parameters("@cognome").Value = tbFiltro.Text
DS = New DataSet
MyCommand.Fill(DS, "utenti")
MyDataGrid.DataSource = DS.Tables("utenti").DefaultView
MyDataGrid.DataBind()
End Sub
</script>
<body>
<form id="Form1" method="post" runat="server">
<asp:TextBox id="tbFiltro" runat="server">pippo</asp:TextBox>
<asp:Button id="btnFiltra" runat="server" Text="Filtra Cognome"
OnClick="btnFiltra_Click"></asp:Button>
<BR><BR>
<ASP:DataGrid id="MyDataGrid" runat="server">
</ASP:DataGrid></form>
</body>
</HTML>
Esempio 4: Usare le transaction
Private Sub UpdateWithTransactions()
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString =
"server=NOMEDBSERVER;database=NOMEDB;uid=USERID;pwd=PASSWORD;"
conn.Open()
Dim trans As SqlTransaction
trans = conn.BeginTransaction()
Try
Dim sql1 As String = "Insert INTO Tabella1 (campo) VALUES ('valore')"
Dim sql2 As String = "Insert INTO Tabella2 (campo1,campo2) VALUES
('valore1','valore2')"
Dim comm As SqlCommand = New SqlCommand
comm.Connection = conn
comm.Transaction = trans
comm.CommandText = sql1
comm.ExecuteNonQuery()
comm.CommandText = sql2
comm.ExecuteNonQuery()
trans.Commit()
Response.Write("Fine elaborazione")
Catch ex As SqlException
trans.Rollback()
Response.Write(ex.ToString())
Finally
conn.Close()
End Try
End Sub