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 modalita di sola lettura e forward-only.
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 ch un'istruzione SQL utilizzata per effettuare operazioni sui dati |
DataReader | fornisce un accesso ai dati in modalita di sola lettura e forward-only. |
DataAdapter | E' un adattatore di dati che permette di trasferire i dati dal e verso database. |
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 | Rappresenta tutte le colonne in un DataTable. |
DataColumn | Rappresenta una colonna di un DataTable. |
Il framework .Net fornisce diverse classi per il collegamento a un database, in base al tipo di database a cui ci si collega.
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.
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 tabelel "books" e inseriamo dentro tale tabella 4 record.
<%@ 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>
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