Creazione Classi gestione database??

mercoledì 22 ottobre 2008 - 17.51

sankyu Profilo | Senior Member

ciao a tutti sto creandomi delle classi da inserire in una libreria common per facilitarmi il lavoro di sviluppo dei vari DAL delle mie applicazioni; lo faccio perchè sono stufo di scrivere dim cmd as new sqlcommand ecc......
vi posto il codice della parte di dbconnection e di db table ditemi che ne pensate, non sarà troppo pesante? voi come gestite questo tipo di problemi?
Public Class DbConnection
Private connessione As SqlConnection
Private dataSource As String = "xxx"
Private initialCatalog As String = "xxx"
Private persistSecurityInfo As Boolean = True
Private userId As String = "xxx"
Private password As String = "xxx"
Public Sub New()
connessione = creaStringaDiConnessione()
End Sub
Private Function creaStringaDiConnessione() As SqlConnection
Dim connStringBuilder As New SqlConnectionStringBuilder()
connStringBuilder.DataSource = dataSource
connStringBuilder.InitialCatalog = initialCatalog
connStringBuilder.PersistSecurityInfo = persistSecurityInfo
connStringBuilder.UserID = userId
connStringBuilder.Password = password
Return New SqlConnection(connStringBuilder.ToString)
End Function
Public Sub Open()
If Conn.State = ConnectionState.Closed Then
Conn.Open()
End If
End Sub
Public Sub Close()
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
End Sub
Public ReadOnly Property Conn() As SqlConnection
Get
Return connessione
End Get
End Property
end Classe

Public Class DbTable
Private defaultIdName As String = "id"
Dim sql As String
Dim connessione As New DbConnection
Dim cmd As New SqlCommand
Private tableName As String
Public Sub New(ByVal tableName As String)
Me.tableName = tableName
End Sub
Public Sub clear()
sql = "delete from " & tableName
execSql(sql)
End Sub
Public Sub deleteById(ByVal idValue As String)
sql = "delete from " & tableName & " where " & defaultIdName & "=@ "
cmd.Parameters.Add(idValue)
execSql(sql)
End Sub
Public Sub updateAll(ByVal colonneEParametri As Dictionary(Of String, SqlParameter))
sql = "update " & tableName & " set "
Dim stringFormatParameter As String = String.Empty
For Each Str As String In colonneEParametri.Keys
stringFormatParameter += Str & " = " & colonneEParametri(Str).Value & ","
Next
stringFormatParameter = stringFormatParameter.Remove(stringFormatParameter.Count - 1, 1)
sql += stringFormatParameter
execSql(sql)
End Sub
Public Sub insert(ByVal elementiDaInserire As SqlParameterCollection)
Dim stringFormatParameter As String = String.Empty
For i As Int16 = 0 To elementiDaInserire.Count - 1
If i = elementiDaInserire.Count - 1 Then
stringFormatParameter += "@"
Else
stringFormatParameter += "@,"
End If
Next
sql = "Insert into " & tableName & " values (" & stringFormatParameter & ")"
cmd.Parameters.Add(elementiDaInserire)
execSql(sql)
End Sub
Private Sub execSql(ByVal sqlStatement As String)
cmd.CommandText = sqlStatement
cmd.Connection = connessione.Conn
cmd.Connection.Open()
cmd.ExecuteNonQuery()
cmd.Connection.Close()
cmd.Parameters.Clear()
sql = String.Empty
End Sub
End Class

per richiamare il codice faccio una cosa di questo tipo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim parametri As New System.Collections.Generic.Dictionary(Of String, SqlClient.SqlParameter)
parametri.Add("id_area", New SqlClient.SqlParameter("@id_area", 1))
Dim table As New DbTable("areas")
table.updateAll(parametri)
End Sub

che ne pensate?? Help non so se sto seguendo la strada giusta e vorrei evitare di perdere un mese a scrivere codice che poi mi rallenta tutto il sistema in modo spaventoso!!

Brainkiller Profilo | Guru

>che ne pensate?? Help non so se sto seguendo la strada giusta
>e vorrei evitare di perdere un mese a scrivere codice che poi
>mi rallenta tutto il sistema in modo spaventoso!!

Ciao,
su queste tematiche... troverai in giro tanti guru e maestri che ti diranno "come faccio io è il modo corretto". In realtà secondo me ci sono innumerevoli approcci all'argomento e ognuno dovrebbe fare le sue valutazioni e capire qual è la soluzione migliore e nel tempo migliorere la sua codebase sulle base degli errori che ha fatto.

C'è chi usa tools di autogenerazione del codice come Codesmith chi usa degli ORM come nHibernate o prodotti similari LINQ to SQL / Entity Framework chi invece preferisce costruirsi una sua soluzione custom, light e che si adatta ad un numero limitato di funzionalità.

Di solito su progetti piccoli anche io mi creo delle Helper Classes con metodi statici che richiamo con ClasseHelper.GetAll o ClassHelper.GetSingle ecc.mentre su progetti più grossi opero diversamente con i prodotti di cui sopra.

Insomma la risposta è, hai buon senso per valutare sulla base del progetto/i che stai realizzando se vale la pena impegnare tempo per creare la tua codebase di codice che riutilizzerai per altri progetti o appoggiarsi a prodotti già pronti e testati.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

sankyu Profilo | Senior Member

Non so perchè ma mi aspettavo una risposta cosi!!! Infatti anche altri programmatori mi hanno risposto allo stesso modo, il problema è che sto iniziando a programmare in modo "serio" da poco ed ho un sacco di confusione ci sono troppi "guru" come dicevi tu!!!
comunque grazie per la risposta! cercherò di trovare la mia via di programmazione!!
che la forza sia con me giovane padawan !
Grazie,ps come è il metodo che ti sei creato tu? il mio dubbio più grande è se utilizzare il dictionary per creare una coppia colonna,parametro oppure crearmi una mia classe, ho paura che il dictionary sia troppo pesante se utilizzato massicciamente che ne pensi?
ciao!!

chavez Profilo | Newbie

Ciao,

sicuro che valga la pena di "reinventare la ruota"?
Ti dico questo per esperienza: spesso conviene affidarsi a codice testato dalla comunità per risparmiare tempo.....e quindi soldi!

sankyu Profilo | Senior Member

non ne sono sicuro :( !! sto leggendo qualcosa su nhibernate mi sembra davvero completo! a questo punto il dubbio aumenta : nhibernate,linq o me lo faccio da me?? tu che usi? come ti trovi?

chavez Profilo | Newbie

Io utilizzo Subsonic (http://subsonicproject.com/).
Il setup e la configurazione è estremamente semplice. Inoltre sul sito ci sono dei webcast che ti illustrano passo passo la configurazione.
Credo che possa essere una buona soluzione.

sankyu Profilo | Senior Member

Sono rimasto a bocca aperta!!!! Subsonic è fantastico! Grazie molto più comprensibile di nhibernate. Ti devo una birra mi hai salvato un sacco di lavoro! e mi hai convinto a non reinventare la ruota!!!

Brainkiller Profilo | Guru

>Grazie,ps come è il metodo che ti sei creato tu? il mio dubbio
>più grande è se utilizzare il dictionary per creare una coppia
>colonna,parametro oppure crearmi una mia classe, ho paura che
>il dictionary sia troppo pesante se utilizzato massicciamente
>che ne pensi?

Allora io attualmente uso su un progetto LINQ to SQL che ti genera tutte le Entities (classi rimappate su tabella o viste) e il data context. Poi ti puoi creare il tuo DAL che fa uso del DataContext Linq TO SQL. A molti Linq To SQL non piace perchè genera dinamicamente i comandi SQL ma è possibile anche creare delle Stored Procedure e usare quelle in modo che non ci sono infinite combinazioni di query SQL che possono essere inviate al database e anche il DBA non impazzisce. In passato ho usato Codesmith e anche altre soluzioni custom banali che mi sono scritto io.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

sankyu Profilo | Senior Member

Ringrazio anche te, LINQ lo sto studiando e mi pare molto interessante anche se non ho ancora abbastanza conoscenza per metterlo in produzione e la scadenza della consegna del sistema non è troppo lontana non vorrei arrivare con l'acqua alla gola!! Hai qualche link di qualche webcast o tutorial semplice ed applicato su linq?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5