Dovendo interagire direttamente con SQL Server, e senza usare script, ci si può trovare in difficoltà.
Poi però ho pensato “…ma non esisteva un sistema per interfacciarsi direttamente a SQL Server senza uscirne pazzi?” Beh la risposta è si. E si chiama SMO.
SQL Server Management Objects è una serie di oggetti fatti in modo tale da permettere interazione programmatica con ogni funzionalità del DB: ci si possono creare database, scrivere stored procedures, ma anche configurare SQL Server, assegnare permessi etc etc.
Tramite codice posso avere il controllo totale dell’RDBMS, senza neanche troppi sforzi :)
Ad esempio, per creare un database:
Imports Microsoft.SqlServer
Imports Microsoft.SqlServer.Management
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Smo
Dim srv as New Server(".\SQLEXPRESS")
Private Sub CreaDB()
Dim db As New Database(srv, "Nome del DB")
db.Create()
End Sub
Pensiamo invece di voler creare una semplicissima tabella con due colonne, ID (che avrà anche la Primary Key) e Nome:
Private Sub CreaTabella()
Dim db As Database = srv.Databases("Nome del DB")
Dim tbl As New Table(db, "Clienti")
Dim ID As New Column(tbl, "ID")
With ID
.DataType = DataType.Int
.Nullable = False
.Identity = True
.IdentityIncrement = 1
.IdentitySeed = 1
End With
Dim Nome As New Column(tbl, "Nome")
With Nome
.DataType = DataType.VarCharMax
.Nullable = False
End With
tbl.Columns.Add(ID)
tbl.Columns.Add(Nome)
Dim index As New Index(tbl, "PK_Clienti"
index.IndexKeyType = IndexKeyType.DriPrimaryKey
index.IndexedColumns.Add(New IndexedColumn(index, "ID"))
tbl.Indexes.Add(index)
tbl.Create()
End Sub
In questo modo, da codice, con poco sforzo si ha la possibilità di creare db e tabelle in maniera universale, cioè non vincolata da versioni o localizzazioni del db (mi viene in mente Program Files o Programmi, oppure Program Files e Program Files (x86)).