Consiglie - Aiuto

martedì 28 ottobre 2008 - 10.46

wave00 Profilo | Junior Member

Ciao a tutti ragazzi, ho in mente di realizzare un piccolo progettino per un sito di casavacanze, sono agli inizi e finora sono riuscito a configurare il mio web.config per farlo comunicare con sql server management. Ora però vorrei iniziare a far funzionare il tutto, magari avendo un'unica classe base che mi dia la possibilità di accedere al db sfruttando la dichiarazione in connectionstring, in modo che io in base all'oggetto possa creare diverse classi con metodi distinti per richiamare store procedure lato DataAccess, qualcuno può darmi qualche consigli o suggerirmi qualcosa?
Grazie.

alx_81 Profilo | Guru

>Ciao a tutti ragazzi
Ciao!

> ho in mente di realizzare un piccolo progettino
>per un sito di casavacanze, sono agli inizi e finora sono riuscito
>a configurare il mio web.config per farlo comunicare con sql
>server management.
Con SQL Server non con management . Management Studio è un client con interfaccia grafica che ti serve per usare il motore del database. Tu ti connetti a SQL Server, ovvero il server del database. Giusto per precisare

>Ora però vorrei iniziare a far funzionare
>il tutto, magari avendo un'unica classe base che mi dia la possibilità
>di accedere al db sfruttando la dichiarazione in connectionstring,
>in modo che io in base all'oggetto possa creare diverse classi
>con metodi distinti per richiamare store procedure lato DataAccess,
>qualcuno può darmi qualche consigli o suggerirmi qualcosa?
Posso consigliarti di fare una classe che abbia le proprietà (indicative):

- Stringa di connessione
- Stato della connessione
- Eventuale transazione

ed n metodi che ti servono per connetterti e chiudere le connessioni:

- Apertura
- Chiusura
- ...

Per le chiamate ai comandi invece ti consiglio di ragionare più a "entità" e quindi fare un file per ogni oggetto che costituisce il tuo progetto.
Ad esempio, prendi un gestionale di magazzino, l'oggetto magazzino avrà n metodi per ottenere i risultati di base (insert, selectall, selectperID, update, delete) e magari un oggetto magazzino extended che ti permette di lanciare le query/stored procedure ottimizzate per certi scopi.
Quindi fare un Data Layer con una classe che gestisce la connettività (quella sopra) e n classi che ereditano da questa e che lanciano i comandi.
Infine, farei un Layer di Business che gestisca le logiche vere e proprie (Ad esempio quando lanciare che metodo, soglie di controlli vari, ecc).
L'ultimo livello, quello applicativo, chiamerà soltanto il Business Layer e sarà lui (meglio un progetto a parte, come un componente aggiuntivo referenziato nell'applicazione) che richiamerà il Data Layer per interrogare il DB.

>Grazie.
Di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

wave00 Profilo | Junior Member

ok, sei stato eccezionale. Hai capito il mio problema, ora però vorrei mette nero su bianco.
Io ho configurato bene il mio webconfig, e vorrei creare una classe base come hai detto tu.
Ipotizziamo di chiamare la classe base _baseDataAccess, come sarà strutturata?
Le altre classi dove implementerò le store, erediteranno tutte la classe _baseDataAccess.
Riesci a darmi una mano?

alx_81 Profilo | Guru

>ok, sei stato eccezionale. Hai capito il mio problema, ora però
>vorrei mette nero su bianco.
>Io ho configurato bene il mio webconfig, e vorrei creare una
>classe base come hai detto tu.
>Ipotizziamo di chiamare la classe base _baseDataAccess, come
>sarà strutturata?
>Le altre classi dove implementerò le store, erediteranno tutte
>la classe _baseDataAccess.
>Riesci a darmi una mano?
Eccoti, sono riuscito a farti un esempio volante. Non l'ho provato perchè l'ho fatto con Notepad, visto che non ho con me Visual Studio.
Cerca di trarre qualche suggerimento..

Questa è la classe _baseDataAccess:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

E questa è una ipotetica classe che eredita dalla _baseDataAccess:

Imports System.Data.SqlClient Imports System.Data Public Class Magazzino Inherits _baseDataAccess ''' <summary> ''' insert in base ai parametri passati ed a una ipotetica stored procedure ''' </summary> Public Sub Insert(ByVal param1 As String, ByVal param2 As Integer) ' apro la connessione Dim objConnection As SqlConnection = MyBase.OpenConnection() Dim objCommand As SqlCommand = MyBase.GetCommand() objCommand.CommandType = CommandType.StoredProcedure objCommand.CommandText = "dbo.proc_Magazzino_Insert" objCommand.Parameters.AddWithValue("@param1", param1) objCommand.Parameters.AddWithValue("@param2", param2) Try objCommand.ExecuteNonQuery() Catch ex As Exception Throw Finally 'chiudo la connessione MyBase.CloseConnection() End Try End Sub ''' <summary> ''' select in base ad una ipotetica stored procedure ''' </summary> Public Function GetMagazzino(ByVal param1 As String) As DataTable ' apro la connessione Dim objConnection As SqlConnection = MyBase.OpenConnection() Dim objCommand As SqlCommand = MyBase.GetCommand() objCommand.CommandType = CommandType.StoredProcedure objCommand.CommandText = "dbo.proc_Magazzino_Select" objCommand.Parameters.AddWithValue("@param1", param1) Try Dim dt As New DataTable Dim da As New SqlDataAdapter(objCommand) da.Fill(dt) Return dt Catch ex As Exception Throw Finally 'chiudo la connessione MyBase.CloseConnection() End Try End Function End Class

Ti ho messo anche i commenti di documentazione in testa.. Se le provi non garantisco la riuscita della compilazione. Spero di esserti stato comunque di aiuto.
Altra cosa, considera che l'oggetto ConfigurationManager è sotto il namespace System.Configuration, ma devi aggiungerlo anche nei riferimenti del progetto dall'apposito menu.
Ciao!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

wave00 Profilo | Junior Member

Grazie per le risposte e per l'interessamento. Ho strutturato l'intero progetto come mi hai consigliato, cioè così:
-Livello di Presentazione - Ho creato un Progetto AJAX Enabled:
default.aspx
Web.config
-Livello di Applicazione - Ho creato un Progetto di classi:
Classi xxxxx.cs
-Livello di Acesso ai Dati - Ho creato un Progetto di classi:
Classe baseHelper.cs

Dentro la classe baseHelper.cs ho messo il seguente codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Solo che VisualStudio mi dice che "ConfigurationManager" non esiste nel contesto corrente.
Nota: Nel Web.config ho messo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come mai mi da quell'errore?Devo riuscire a collegarmi intanto al db.
Mi hanno consigliato di usare anche il "DataAccessApplicationBlock" come soluzione, solo che per ora, per capire meglio, vorrei fare qualcosa da solo.
Aspetto tue risposte.

alx_81 Profilo | Guru

>Come mai mi da quell'errore?Devo riuscire a collegarmi intanto al db.
Come ti dicevo, devi includere nei riferimenti del progetto che usa il ConfigurationManager anche il Namespace System.Configuration (Tasto destro del mouse sul Project --> Add Reference..)
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5