Linked sql (info)

lunedì 13 dicembre 2010 - 13.04

trinity Profilo | Guru

Ragazzi io ora mi trovo a dover fare una scelta, sto passando a vbnet 2010 e tutti mi stanno parlando di questa nuova tecnologia sql ossia il LINQ to SQL

Vi spiego brevemente come lavoro..

Creo il db sql e tutte le stored che mi servono..poi dal compilatore vb richiamo le stored attraverso delle funzioni e i dati che ricevo li carico in tabelle dataset per poi visualizzarle in report o griglie (gridview).

Ora vorrei iniziare a vedere questa tecnologia linked ma prima vorrei chiedere a voi un cosiglio, da un punto di vista delle prestazioni e del codice è meglio utilizzare questa nuova tecnologia e ovviamente attraverso questa richiamare le mie stored oppure utilizzare le mie vecchie procedure?

Se avete dei link (in italiano se è possibile :D ) postatemeli, ma accetto tutti le info e consigli.

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Ora vorrei iniziare a vedere questa tecnologia linked ma prima
>vorrei chiedere a voi un cosiglio, da un punto di vista delle
>prestazioni e del codice è meglio utilizzare questa nuova tecnologia
>e ovviamente attraverso questa richiamare le mie stored oppure
>utilizzare le mie vecchie procedure?
In generale, preferisco fare classi che tornano resultset popolando collezioni Generics create ad hoc.
Poi uso le funzionalità estese di LINQ sulle collezioni. Di link to sql non mi fido tantissimo, e oltretutto, tempo fa, non faceva nemmeno un gran sql dinamico..
Mi piace di più l'idea di uno strato pubblico di stored procedure a cui dare livelli di permessi particolari role based. Però è anche vero che usando LINQ hai dei vantaggi e non piccoli come:
- funzionalità di ORM
- velocità di implementazione e di sviluppo
- cross db

Diciamo che se posso usare sql e sono abbastanza sicuro che non migrerò codice ad un altro DBMS, preferisco le sp, anche per ragioni di caching dei piani di esecuzione (nonchè per lo strato di security più sotto controllo).

Ho però trovato alcuni post su LINQ to SQL, prova ad approfondire qui:

Alessandro del Sole:
http://community.visual-basic.it/alessandro/archive/2008/04/15/22580.aspx

http://www.mssqltips.com/tip.asp?tip=1534
http://blogs.msdn.com/b/pietrobr/archive/2008/01/22/linq-to-sql-vs-linq-to-entities.aspx
http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx

qualche webcast:
http://www.microsoft.com/italy/beit/Generic.aspx?search=tutorial+linq&type=-1&audience=-1&userlevel=-1&product=-1
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Quindi mi stai dicendo che se si lavora solo escusivamente su un db sql è meglio utilizzare le stored procedure e richiamarle sull'applicativo attraverso le creazione di classi che a loro interno vi sono delle funzioni che richiamano le stored specifica come in questo esempio:

Imports System.Data.SqlClient Public Class GestoreNazioni Public Function CaricaRec(ByVal ObjNazione As PropertyNazioni) As PropertyNazioni Dim oNazione As PropertyNazioni = New PropertyNazioni Try SqlCmd.CommandText = "GetNazione_new" SqlCmd.Parameters.Add("@Nazione", SqlDbType.VarChar).Value = ObjNazione.Nazione SqlCmd.Connection = Db SqlCmd.CommandType = CommandType.StoredProcedure SqlDr = SqlCmd.ExecuteReader If SqlDr.Read() Then oNazione.Nazione = SqlDr.GetSqlString(0).Value() oNazione.CodiceNazIstat = SqlDr.GetSqlInt32(1).Value End If Return oNazione Catch ex As Exception Throw ex Finally SqlDr.Close() SqlCmd.Parameters.Clear() SqlCmd.Dispose() End Try End Function End Class


Public Class PropertyNazioni Private codnazIstat As Int32 Private Naz, Codnaz As String Public Property CodiceNazIstat() As Int32 Get Return codnazIstat End Get Set(ByVal value As Int32) codnazIstat = value End Set End Property Public Property Nazione() As String Get Return Naz End Get Set(ByVal value As String) Naz = value End Set End Property Public Property CodNazione() As String Get Return Codnaz End Get Set(ByVal value As String) Codnaz = value End Set End Property End Class Public Class NazioniCollection Inherits CollectionBase ' Aggiunge l'oggetto alla collection Public Sub Add(ByVal item As PropertyNazioni) List.Add(item) End Sub ' Ritorna l'n-esimo elemento Public ReadOnly Property Item(ByVal index As Int32) As PropertyNazioni Get Return CType(List(index), PropertyNazioni) End Get End Property End Class
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Quindi mi stai dicendo che se si lavora solo escusivamente su
>un db sql è meglio utilizzare le stored procedure e richiamarle
>sull'applicativo attraverso le creazione di classi che a loro
>interno vi sono delle funzioni che richiamano le stored specifica
>come in questo esempio:
esatto, se stai su sql server, sì. Poi, avendo le collection generiche (List Of <T>) puoi usare anche agevolmente linq
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>Quindi mi stai dicendo che se si lavora solo escusivamente su
>>un db sql è meglio utilizzare le stored procedure e richiamarle
>>sull'applicativo attraverso le creazione di classi che a loro
>>interno vi sono delle funzioni che richiamano le stored specifica
>>come in questo esempio:
>esatto, se stai su sql server, sì. Poi, avendo le collection
>generiche (List Of <T>) puoi usare anche agevolmente linq
>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT

Ciao Alessandro, ricapitolando un pò il tutto, ho letto e mi hanno detto che le stored si possono richiamare ed essere usate anche da linq...Allora mi domando e domando anche a te da esperto, se scriviamo su sql le sp e poi le richiamiamo utilizzando linq, potremmo avere l'efficacia delle sp in aggiunta di linq...oppure sbaglio? In pratica io devo trovare la migliore procedura per avere nel mio codice e programma le seguenti caratteristiche, affidabilità, velocità di esecuzione e stabilità...Io con le sp scritte su sql mi sn sempre trovato bene ma dato che parlano di linq come il futuro della programmazione allora volevo procedere con un aggiornamento del mio sapere...
Dammi un consiglio ;)

ciao

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

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>se scriviamo su sql le sp e poi le richiamiamo utilizzando linq, potremmo avere l'efficacia delle sp in aggiunta di linq...oppure
>sbaglio? In pratica io devo trovare la migliore procedura per avere nel mio codice e programma le seguenti caratteristiche,
>affidabilità, velocità di esecuzione e stabilità...Io con le sp scritte su sql mi sn sempre trovato bene ma dato che parlano
>di linq come il futuro della programmazione allora volevo procedere con un aggiornamento del mio sapere...
>Dammi un consiglio ;)
Come al solito si tratta di scuole di pensiero. Link to SQL non mi piace molto però lo trovo veramente potente laddove vuoi modellare partendo dalla programmazione, per poi andare a db.
Poi è potente per definire un livello di programmazione in più su cui utilizzare linguaggi pseudo dichiarativi (un simil sql) per scorrere le tue entità.
Potrebbe essere utile anche per comporre dinamicamente l'sql in base alle tue entità. Con le stored procedure sinceramente perde un po'. Preferisco usare le funzionalità aggiuntive di linq direttamente sulle collezioni che sono il risultato di stored procedure. Di solito utilizzo un data layer che esegue le chiamate, un biz layer che le organizza usando linq, e un presentation layer che le layoutizza
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>se scriviamo su sql le sp e poi le richiamiamo utilizzando linq, potremmo avere l'efficacia delle sp in aggiunta di linq...oppure
>>sbaglio? In pratica io devo trovare la migliore procedura per avere nel mio codice e programma le seguenti caratteristiche,
>>affidabilità, velocità di esecuzione e stabilità...Io con le sp scritte su sql mi sn sempre trovato bene ma dato che parlano
>>di linq come il futuro della programmazione allora volevo procedere con un aggiornamento del mio sapere...
>>Dammi un consiglio ;)
>Come al solito si tratta di scuole di pensiero. Link to SQL non
>mi piace molto però lo trovo veramente potente laddove vuoi modellare
>partendo dalla programmazione, per poi andare a db.
>Poi è potente per definire un livello di programmazione in più
>su cui utilizzare linguaggi pseudo dichiarativi (un simil sql)
>per scorrere le tue entità.
>Potrebbe essere utile anche per comporre dinamicamente l'sql
>in base alle tue entità. Con le stored procedure sinceramente
>perde un po'. Preferisco usare le funzionalità aggiuntive di
>linq direttamente sulle collezioni che sono il risultato di stored
>procedure. Di solito utilizzo un data layer che esegue le chiamate,
>un biz layer che le organizza usando linq, e un presentation
>layer che le layoutizza

wow ma non sto a questi livelli...ossia dovrei prima di tutto capire cosa significa data layer, biz layer,presentation layer. Comunque con linq devo inizare da zero perchè non ho mai visto ma te mi consigli comunque di non utilizzare sp se utilizzo linq e poi a questo punto se dovessi passare a linq il codice delle query che di solito scrivevo sulle stored verrà scritto solo sul compilatore dove utilizzo linq, vero? A questo punto se devo effettuare delle modifiche mi toccherà modificare gli eseguibili e ridarli a tutti i clienti invece con le stored su sql server nella maggior parte dei casi modificavo solo la stored e tutto andava a posto...
oppure c'è un modo per scrivere stored e legare i loro risultato a linq senza perdere prestazione (come citavi sopra)

Ciao
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>wow ma non sto a questi livelli...ossia dovrei prima di tutto
>capire cosa significa data layer, biz layer,presentation layer.
eheheh, l'astrazione è quella che ti consente di dividere un progetto in tanti livelli per fare in modo di rendere più manutenibile ogni livello ed anche di evitare di ricompilare tutto sempre.

>Comunque con linq devo inizare da zero perchè non ho mai visto
>ma te mi consigli comunque di non utilizzare sp se utilizzo linq
>e poi a questo punto se dovessi passare a linq il codice delle
>query che di solito scrivevo sulle stored verrà scritto solo
>sul compilatore dove utilizzo linq, vero? A questo punto se devo
>effettuare delle modifiche mi toccherà modificare gli eseguibili
>e ridarli a tutti i clienti invece con le stored su sql server
>nella maggior parte dei casi modificavo solo la stored e tutto
>andava a posto...
Questo perchè potevi permettere di mettere il tuo livello di logica (il biz layer, la logica di business) sul db, ma se devi scalare, parallelizzare, dividere livelli, distribuire logiche su server separati, saresti legato.
Ad esempio, nel progetto che sto seguendo ora questo non sarebbe possibile

>oppure c'è un modo per scrivere stored e legare i loro risultato
>a linq senza perdere prestazione (come citavi sopra)
segui questi post:
http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx
http://weblogs.asp.net/scottgu/archive/2007/08/23/linq-to-sql-part-7-updating-our-database-using-stored-procedures.aspx
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>Questo perchè potevi permettere di mettere il tuo livello di
>logica (il biz layer, la logica di business) sul db, ma se devi
>scalare, parallelizzare, dividere livelli, distribuire logiche
>su server separati, saresti legato.
>Ad esempio, nel progetto che sto seguendo ora questo non sarebbe
>possibile
Ma io utilizzo sicuro un solo server è solo che prima scrivevo tutto il codice sul compilatore, poi ho scoperto le stored e quindi ho diviso le query sul db e sul compilatore le richiamavo soltato e le caricavo nelle collection..pertanto diminuivo il codice sul file eseguibile e minor grandezza...Ora con il linq volevo fare la stessa cosa ma sfruttando le sue potenzialità....Solo che non riesco a capire perchè scrivendo le stored sul db e gestirle con il linq come mai si perde prestazione?

>>oppure c'è un modo per scrivere stored e legare i loro risultato
>>a linq senza perdere prestazione (come citavi sopra)
>segui questi post:
>http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx
>http://weblogs.asp.net/scottgu/archive/2007/08/23/linq-to-sql-part-7-updating-our-database-using-stored-procedures.aspx
>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Solo che non riesco a capire perchè scrivendo le stored sul db e gestirle
>con il linq come mai si perde prestazione?
non perdi prestazione.. perdi le potenzialità di linq per fare entità e relazioni..
Il suo vantaggio, a mio avviso, è il fatto di dare strumenti per ragionare direttamente sulle entità sql..
Quindi lanciando semplicemente una execute, vanifichi un po' i suoi vantaggi infrastrutturali.
Intendevo quello
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>Solo che non riesco a capire perchè scrivendo le stored sul db e gestirle
>>con il linq come mai si perde prestazione?
>non perdi prestazione.. perdi le potenzialità di linq per fare
>entità e relazioni..
>Il suo vantaggio, a mio avviso, è il fatto di dare strumenti
>per ragionare direttamente sulle entità sql..
>Quindi lanciando semplicemente una execute, vanifichi un po'
>i suoi vantaggi infrastrutturali.
>Intendevo quello

Ho capito e Ho visto i tuoi link, poi con calma ci darà meglio un'occhiata...Solo che andando a fare la domanda diretta perchè ora mi hai fatto salire in mente dei dubbi...se te hai un progetto come il mio ossia un db sql server situato su una macchina in rete internet ed intranet...questo db deve rivere i dati scritti telematicamente da vari clienti (simultanemante a volte) e poi essere gestiti per lettere e stampe dalla sede principale del mio cliente attraverso una rete intranet...Pertanto io avevo strutturato sp e relazionato le tabelle tra loro...Ovviamente facendo cos' ho diminuito moltissimo il codice sull'eseguibile che distrubuisco ai diversi clienti che si devono connettere in remoto a questo db.
Ora secondo il tuo punto di vista, come consiglio si intende, continueresti a scrivere stored su db e richiamarle con linq oppure scrivere tutto con linq senza le stored a questo punto dovrei anche prendere tutte le 50 ed oltre stored che ho scritte e riscriverle in linquaggio linq sotto l'eseguibile (giusto?)

Ciao

>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Ora secondo il tuo punto di vista, come consiglio si intende,
>continueresti a scrivere stored su db e richiamarle con linq
>oppure scrivere tutto con linq senza le stored a questo punto
>dovrei anche prendere tutte le 50 ed oltre stored che ho scritte
>e riscriverle in linquaggio linq sotto l'eseguibile (giusto?)
non so quanto possa darti in più linq. Quindi lascerei l'interfaccia pubblica verso db via stored procedure, mentre continuerei a fare le chiamate classiche, usando le funzionalità avanzate di linq sulle eventuali collezioni di ritorno. Linq to sql lo userei solo per "impararlo"
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>Ora secondo il tuo punto di vista, come consiglio si intende,
>>continueresti a scrivere stored su db e richiamarle con linq
>>oppure scrivere tutto con linq senza le stored a questo punto
>>dovrei anche prendere tutte le 50 ed oltre stored che ho scritte
>>e riscriverle in linquaggio linq sotto l'eseguibile (giusto?)
>non so quanto possa darti in più linq. Quindi lascerei l'interfaccia
>pubblica verso db via stored procedure, mentre continuerei a
>fare le chiamate classiche, usando le funzionalità avanzate di
>linq sulle eventuali collezioni di ritorno. Linq to sql lo userei
>solo per "impararlo"

:D Quindi lo imparerei solo per cultura personale in più..alla fine scrivere stored e richiamarle da vb è sempre la miglior soluzione...Te parli di cmq utilizzare linq per prendere i dati dalle stored e non so per esempio visualizzare in gridview oppure popolare dei dataset e così via....giusto?

Così in tal modo ho sempre alte prestazione da parte di sql e del codice stored

>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>:D Quindi lo imparerei solo per cultura personale in più..alla
>fine scrivere stored e richiamarle da vb è sempre la miglior
>soluzione...Te parli di cmq utilizzare linq per prendere i dati
>dalle stored e non so per esempio visualizzare in gridview oppure
>popolare dei dataset e così via....giusto?
non usando più dataset e datatable, direi di no. Però il concetto è quello.
Uso le collezioni di ritorno che di solito sono List di mie entità (classi scritte da me proprio).
Quelle collezioni, siccome implementano le interfacce sufficienti al binding, le uso come datasource diretto..
In realtà uso molti datareader e con essi popolo le collezioni. Da lì, uso le collezioni in maniera disconnessa.
DataTable e DataSet sono un lontano ricordo anche perchè non sono molto comodi e sprecano tanta memoria inutilmente.. Se li usi solo come "container" di dati.

Il modello è:

una classe per ogni modello (ovvero le entità)
una classe per il data layer (ovvero le chiamate a sorgenti come db, file, xml, web services, ecc.) con eventuale interfaccia per il data layer
una classe per il business layer (ovvero le chiamate al data layer riorganizzate per passare i dati all'app) con eventuale interfaccia per il business layer
presentation layer (applicazione diciamo)
layout

il data layer riempie le mie list of modello e le passa popolate al biz layer che le organizza per prepararle per i client (web, win, wpf, servizi).
Le applicazioni consumano i dati tornanti dal biz..

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Allora prima di tutto ti chiedo per richiamare le stored ed utlizzarle con linq vedo gli esempi che mi hai postato?

Poi io i dataset li utilizzo solo come contenitore di dati..esempio li utlizzo per passare i dati ai report di stampa (crystal report net).
Oppure dato che la mia applicazione è totalmente in remoto attraverso continue transazioni...ci sono alcune tabelle tipo i comuni d'italia e le nazioni del mondo che essendo parecchie non posso sempre eseguire su ogni textbox un controllo e quindi eseguire una stored in remoto pertanto alla connessione al db eseguo un caricamento dei "dati di sistema" ossia prendo tutti i record dei comuni e delle nazioni e li vado a depositare in dei dataset così posso lavorare in offline a velocità elevetissime sui dataset come se stessi in locale e poi li svuoto ovviamente alla chiusura del programma.
Penso che questa procedura sia valida, che ne pensi?

Anche io dopo aver richiamato le stored utilizzo datareader e cicli per riempire le mie collezioni (classi) da me create. Ma non capisco quando citi:

Quelle collezioni, siccome implementano le interfacce sufficienti
>al binding, le uso come datasource diretto..
>In realtà uso molti datareader e con essi popolo le collezioni.
>Da lì, uso le collezioni in maniera disconnessa.
>DataTable e DataSet sono un lontano ricordo anche perchè
>non sono molto comodi e sprecano tanta memoria inutilmente..


Mi puoi spiegare meglio a cosa ti riferisci?....

questo di seguito per esempio è un mio codice con cui popolo una collezione:

Public Function CaricaRec(ByVal ObjAlb As PropertyAlb) As PropertyAlb Dim OAlb As PropertyAlb = New PropertyAlb Try SqlCmd.CommandText = "GetAlb_new" SqlCmd.Parameters.Add("@CodAlb", SqlDbType.Int).Value = ObjAlb.CodiceAlbergo SqlCmd.Parameters.Add("@Codcomune", SqlDbType.Int).Value = ObjAlb.CodiceComune SqlCmd.Connection = Db SqlCmd.CommandType = CommandType.StoredProcedure SqlDr = SqlCmd.ExecuteReader If SqlDr.Read() Then OAlb.CodiceAlbergo = SqlDr.GetSqlInt32(0).Value OAlb.Descrizione = SqlDr.GetSqlString(1).Value OAlb.Indirizzo = SqlDr.GetSqlString(2).Value OAlb.CapAlb = SqlDr.GetSqlString(3).Value OAlb.CittaAlb = SqlDr.GetSqlString(4).Value OAlb.CodiceComune = SqlDr.GetSqlInt32(5).Value OAlb.Provincia = SqlDr.GetSqlString(6).Value OAlb.CodiceProvincia = SqlDr.GetSqlInt32(7).Value OAlb.CodiceRegione = SqlDr.GetSqlInt32(8).Value OAlb.CodiceCategoria = SqlDr.GetSqlInt32(9).Value OAlb.Categoria = SqlDr.GetSqlString(10).Value OAlb.PartitaIva = SqlDr.GetSqlString(11).Value OAlb.TelAlb = SqlDr.GetSqlString(12).Value OAlb.FaxAlb = SqlDr.GetSqlString(13).Value OAlb.EmailAlb = SqlDr.GetSqlString(14).Value OAlb.SitoAlb = SqlDr.GetSqlString(15).Value OAlb.VersProgramma = SqlDr.GetSqlString(16).Value OAlb.Nrpostiletto = SqlDr.GetSqlInt32(17).Value OAlb.Nrpostilettoconfermati = SqlDr.GetSqlInt32(18).Value If SqlDr.GetSqlDateTime(19).IsNull = True Then OAlb.DataAttivazione = Nothing Else OAlb.DataAttivazione = SqlDr.GetSqlDateTime(19).Value End If If SqlDr.GetSqlDateTime(20).IsNull = True Then OAlb.DataScadenza = Nothing Else OAlb.DataScadenza = SqlDr.GetSqlDateTime(20).Value End If OAlb.BloccoRecord = SqlDr.GetSqlInt32(21).Value OAlb.Password = SqlDr.GetSqlString(22).Value OAlb.CodiceDependance = SqlDr.GetSqlInt32(23).Value OAlb.BloccoAccesso = SqlDr.GetSqlInt32(26).Value End If Return OAlb Catch ex As Exception Throw ex Finally SqlDr.Close() SqlCmd.Parameters.Clear() SqlCmd.Dispose() End Try End Function

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Allora prima di tutto ti chiedo per richiamare le stored ed utlizzarle
>con linq vedo gli esempi che mi hai postato?
sì i link sono di Scott Guthrie, un blog da seguire, credimi

>Poi io i dataset li utilizzo solo come contenitore di dati..esempio
>li utlizzo per passare i dati ai report di stampa (crystal report net).
il problema è quello . Usati come meri container sono uno spreco di memoria. DataSet e DataTable hanno al loro interno informazioni utili per relazioni, vincoli, indici di supporto, ecc.. tutto il corredo per farsi una sorta di database in locale. Usati come contenitori sono peggio di liste generiche.

>Oppure dato che la mia applicazione è totalmente in remoto attraverso
>continue transazioni...ci sono alcune tabelle tipo i comuni d'italia
>e le nazioni del mondo che essendo parecchie non posso sempre
>eseguire su ogni textbox un controllo e quindi eseguire una stored
>in remoto pertanto alla connessione al db eseguo un caricamento
>dei "dati di sistema" ossia prendo tutti i record dei comuni
>e delle nazioni e li vado a depositare in dei dataset così posso
>lavorare in offline a velocità elevetissime sui dataset come
>se stessi in locale e poi li svuoto ovviamente alla chiusura
>del programma.
per questo ci sono le cache. Puoi fare caching sul tuo sito dando un intervallo dopo il quale svuotare le cache e ricaricare dalla sorgente. Ma qui ti consiglio di documentarti, magari partendo da questo link:
http://msdn.microsoft.com/it-it/library/xsbfdd8c(VS.80).aspx

>Penso che questa procedura sia valida, che ne pensi?
è una sorta di cache e quindi il concetto è valido eccome, ma dataset è comunque abbastanza pesante. Considera che tu mi dici "tanti record" per nazioni e comuni, ma quelli non sono tanti, sono veramente pochi.
Quindi, per scalare un sito web remoto (o un app remota anche non web) è buona cosa implementare un livello di cache ben gestito.

>Mi puoi spiegare meglio a cosa ti riferisci?....
Se tu fai un metodo che torna List Of, quello può essere il datasource delle tue grid o degli iteratori che utilizzi nelle applicazioni.
Quindi perchè passare da un datatable o un dataset se lo uso al 10% quando con una snellissima lista generica risolvo il problema e scarico memoria?

l'esempio che mi hai passato popola un oggetto, non una collezione List Of..
Puoi fare oggetti di tipo List Of TuoTipo, e poi, per ogni record tornato dall'execute reader, inserirlo con il metodo Add della lista..
alla fine hai un resultset disconnesso che puoi già consumare e che arriva a tenere 3 volte meno di un dataset..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>Allora prima di tutto ti chiedo per richiamare le stored ed utlizzarle
>>con linq vedo gli esempi che mi hai postato?
>sì i link sono di Scott Guthrie, un blog da seguire, credimi
>
>
>>Poi io i dataset li utilizzo solo come contenitore di dati..esempio
>>li utlizzo per passare i dati ai report di stampa (crystal report net).
>il problema è quello . Usati come meri container sono uno
>spreco di memoria. DataSet e DataTable hanno al loro interno
>informazioni utili per relazioni, vincoli, indici di supporto,
>ecc.. tutto il corredo per farsi una sorta di database in locale.
>Usati come contenitori sono peggio di liste generiche.
>
>>Oppure dato che la mia applicazione è totalmente in remoto attraverso
>>continue transazioni...ci sono alcune tabelle tipo i comuni d'italia
>>e le nazioni del mondo che essendo parecchie non posso sempre
>>eseguire su ogni textbox un controllo e quindi eseguire una stored
>>in remoto pertanto alla connessione al db eseguo un caricamento
>>dei "dati di sistema" ossia prendo tutti i record dei comuni
>>e delle nazioni e li vado a depositare in dei dataset così posso
>>lavorare in offline a velocità elevetissime sui dataset come
>>se stessi in locale e poi li svuoto ovviamente alla chiusura
>>del programma.
>per questo ci sono le cache. Puoi fare caching sul tuo sito dando
>un intervallo dopo il quale svuotare le cache e ricaricare dalla
>sorgente. Ma qui ti consiglio di documentarti, magari partendo
>da questo link:
>http://msdn.microsoft.com/it-it/library/xsbfdd8c(VS.80).aspx
>
>>Penso che questa procedura sia valida, che ne pensi?
>è una sorta di cache e quindi il concetto è valido eccome, ma
>dataset è comunque abbastanza pesante. Considera che tu mi dici
>"tanti record" per nazioni e comuni, ma quelli non sono tanti,
>sono veramente pochi.
>Quindi, per scalare un sito web remoto (o un app remota anche
>non web) è buona cosa implementare un livello di cache ben gestito.
>
>>Mi puoi spiegare meglio a cosa ti riferisci?....
>Se tu fai un metodo che torna List Of, quello può essere il datasource
>delle tue grid o degli iteratori che utilizzi nelle applicazioni.
>Quindi perchè passare da un datatable o un dataset se lo uso
>al 10% quando con una snellissima lista generica risolvo il problema
>e scarico memoria?
>
>l'esempio che mi hai passato popola un oggetto, non una collezione
>List Of..
>Puoi fare oggetti di tipo List Of TuoTipo, e poi, per ogni record
>tornato dall'execute reader, inserirlo con il metodo Add della
>lista..
>alla fine hai un resultset disconnesso che puoi già consumare
>e che arriva a tenere 3 volte meno di un dataset..
Quinidi potrei con il list of ovviare anche al mio problema dei dataset...
Senti hai qualche lik dv ci sono esempi su come si costruisce e si popola una list of? così me lo studio un pò


>--
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Senti hai qualche lik dv ci sono esempi su come si costruisce
>e si popola una list of? così me lo studio un pò
prova qui:
http://www.vbdotnetheaven.com/UploadFile/Saurabh.Mishra/GenericsInCsharp211232006000706AM/GenericsInCsharp2.aspx

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Scusa un ultima domanda (per ora ) io come hai potuto capire ho dei programma uguali distribuiti diversi clienti che girano in locale come applicazione ma il database è interamente on line su un server remoto. In una form di vb ci sono delle textbox dove vengono caricari i comuni d'italia e le nazioni mondiali...Ora su queste textbbox ho creato un codice che sull'evento keyup mentre il cliente digita il comune o la nazione immediatamente appare in base alle lettere digitate il risultato che si sta cercando...Ora questo codice un una continua esecuzione di una stored remota dove al suo interno c'è una select con un like semplice...Facendo dei test se eseguo questo codice sulle textbox il caricamento del risultato è lentissimo..Allora mi ero inventato l'idea che all'inizio quando il programma carica la connessione al db eseguo 2 select una sui comuni ed una sulle nazioni ed i dati li butto dentro dei dataset...Ora sul keyup non eseguo più una stored remota ma una select su un dataset locale..Il risultato è che la ricerca e visualizzazione del dato è molto veloce come sel il db stesse in locale...Pertanto la mia domanda (scusa se sn stato lungo nella spiegazione) Stando e quello che dici te dei dataset che consumano molta memoria...se creo degli oggetti e delle list of posso eseguire le stesse operazione sul keyup delle textbox come le eseguo attualmente attraverso i dataset? Ovviamente ottenendo anche un risparmio di memoria...

Spero di averti fatto capire la mia situazione

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Scusa un ultima domanda (per ora ) io come hai potuto capire
>ho dei programma uguali distribuiti diversi clienti che girano
>in locale come applicazione ma il database è interamente on line
>su un server remoto. In una form di vb ci sono delle textbox
>dove vengono caricari i comuni d'italia e le nazioni mondiali...Ora
>su queste textbbox ho creato un codice che sull'evento keyup
>mentre il cliente digita il comune o la nazione immediatamente
>appare in base alle lettere digitate il risultato che si sta
>cercando...Ora questo codice un una continua esecuzione di una
>stored remota dove al suo interno c'è una select con un like
>semplice...Facendo dei test se eseguo questo codice sulle textbox
>il caricamento del risultato è lentissimo..Allora mi ero inventato
>l'idea che all'inizio quando il programma carica la connessione
>al db eseguo 2 select una sui comuni ed una sulle nazioni ed
>i dati li butto dentro dei dataset...Ora sul keyup non eseguo
>più una stored remota ma una select su un dataset locale..Il
>risultato è che la ricerca e visualizzazione del dato è molto
>veloce come sel il db stesse in locale...
ed è un'idea di caching, ok..

>Pertanto la mia domanda
>(scusa se sn stato lungo nella spiegazione) Stando e quello che
>dici te dei dataset che consumano molta memoria...se creo degli
>oggetti e delle list of posso eseguire le stesse operazione sul
>keyup delle textbox come le eseguo attualmente attraverso i dataset?
se ti basta che siano vive solo durante l'esecuzione del programma e che ad ogni avvio venga scaricato l'elenco completo, sì, è la medesima cosa.

>Ciao e grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Ciao scusa...mi sono dimenticato di chiederti. io per i report utilizzo il crystal report net integrato nel visual studio e per passare i dati ai report ci connettevo una tabella del dataset...se creo i campi per le list of potrei gli stessi campi passarli al crystal report senza utilizzare i dataset? E se si come?

In pratica parlando con te ho capito che i dataset sono pesanti e potrei svolgere i miei codici con sintassi + leggere e di grandi prestazioni :D pertanto per eleiminare tutto ciò che faccio con i dataset debbo per forza capire anche il passaggio dei dati ai report.

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Ciao scusa...mi sono dimenticato di chiederti. io per i report
>utilizzo il crystal report net integrato nel visual studio e
>per passare i dati ai report ci connettevo una tabella del dataset...se
>creo i campi per le list of potrei gli stessi campi passarli
>al crystal report senza utilizzare i dataset? E se si come?
Ciao, eh.. non utilizzo crystal report e non lo conosco nemmeno. Non amo la sua soluzione..
Di solito uso o reporting services oppure creo pdf ad hoc con iTextSharp..
Provo a passare il post a chi sicuramente conosce la problematica meglio di me.

>Ciao e grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

freeteo Profilo | Guru

Ciao ragazzi,
mi intrometto per rispondere a Trinity per quanto riguarda Crystal:
Con Crystal puoi passare una struttura che rispecchi quello che hai usato per disegnare i Report dentro a Visual Studio (tipicamente con una connection al db etc...), ma non è detto che sia esattamente un dataset quello che si aspetta runtime, io infatti di solito gli passo i dati come IEnumerable<T> dove "T" è la mia classe che ha le proprietà con lo stesso nome (e tipo) dei campi del db che ho usato per disegnarlo.

A runtime poi di fatto magari mi arriva da altre fonti dati, o generati a runtime etc...insomma non importa la sorgente di questi dati, ma la struttura è la stessa ed è questo l'importante.
Spero di non essere stato troppo contorto nella spiegazione .


ps: se ti cimenti con questo strumento, posta eventuali domande nella stanza dedicata alla reportistica, Grazie.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

trinity Profilo | Guru

Grazie Matteo e scusami, sapevo che dovevo scriverlo nella sezione dedicata ai report ma stavo finendo il discorso con alex che ho detto postarlo qui una sola domanda non crea problemi :D.

Comunque per Alex hai detto che usi per i report itaxtsharp...che qualcosa che vada bene per vb net e che si integri bene con esso?

ciao e grazie e tutti
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Grazie Matteo e scusami, sapevo che dovevo scriverlo nella sezione
>dedicata ai report ma stavo finendo il discorso con alex che
>ho detto postarlo qui una sola domanda non crea problemi :D.
comunque quello che dice Teo era proprio per aiutarti con crystal..

>Comunque per Alex hai detto che usi per i report itaxtsharp...che
>qualcosa che vada bene per vb net e che si integri bene con esso?
potrebbe esserti di aiuto?
http://www.vbnet.it/public/utility/stampa_contenuti.aspx?id=137
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Ciao scusa, ma dopo diversi giorni ti ricontatto sempre su questo thread perchè stavo rileggendo un pò tutti i vari post che abbiamo scritto e ad uno mi citi:

.....non so quanto possa darti in più linq. Quindi lascerei l'interfaccia pubblica verso db via stored procedure, mentre continuerei a fare le chiamate classiche, usando le funzionalità avanzate di linq sulle eventuali collezioni di ritorno. .. ....

e poi mi spiegavi anche questo:

....Il modello è:
una classe per ogni modello (ovvero le entità)
una classe per il data layer (ovvero le chiamate a sorgenti come db, file, xml, web services, ecc.) con eventuale interfaccia per il data layer
una classe per il business layer (ovvero le chiamate al data layer riorganizzate per passare i dati all'app) con eventuale interfaccia per il business layer
presentation layer (applicazione diciamo)
layout......

Pertanto, avresti mica dei link web dove posso vedere ed imparare queste procedure, tipo per esempio quando parli di utilizzare le funzionalità avanzate di linq sulle eventuali collezioni di ritorno.

qualcosa che mi possa fare capire meglio ed imparare :D

Grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

Ciao

>qualcosa che mi possa fare capire meglio ed imparare :D
per Linq questo link è ottimo:
http://msdn.microsoft.com/en-us/vcsharp/aa336746

per il modello di sviluppo ti consiglio di documentarti sui vari design pattern, e pattern di sviluppo.
E' un argomento veramente ampio, consulta anche qualche blog di esperti come Scott Guthrie: http://weblogs.asp.net/scottgu/, oppure Ayende: http://ayende.com/Blog/default.aspx

>Grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

>>qualcosa che mi possa fare capire meglio ed imparare :D
>per Linq questo link è ottimo:
>http://msdn.microsoft.com/en-us/vcsharp/aa336746


In pratica nel link che mi hai passato dovrei vedere solo la sezione: Operatori di conversione, perchè tutte le altre voci parlano di query sql che io invece eseguo nelle sp, giusto quello che dico?

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>In pratica nel link che mi hai passato dovrei vedere solo la
>sezione: Operatori di conversione, perchè tutte le altre voci
>parlano di query sql che io invece eseguo nelle sp, giusto quello
>che dico?
Ogni esempio è validissimo per imparare ad usare Linq sulle collezioni
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Cioè te mi stai dicendo che sulle collezioni si possono usare anche per esempio le Restriction Operators,Aggregate Operators,Set Operators,Projection Operators e così via
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Cioè te mi stai dicendo che sulle collezioni si possono usare
>anche per esempio le Restriction Operators,Aggregate Operators,Set
>Operators,Projection Operators e così via
Ripeto, tutte quelle istruzioni su quel link possono essere usate su liste..

esempio:

collezione.Where(c => c.campo = valore).Min(m => m.campo);


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

perfetto ho capito, ma toglimi allora un dubbio, tutte le stored che io ho creato nei miei progetti oppure che di solito creo, esse mi restituiscono già i risultati che devo solamente caricare nelle collection e poi farle vedere a video...quindi teoricamente non mi servirebbero queste istruzioni a meno che non debba caricare una sequenza di dati nella lista e poi lavorando in offline durante il progetto se devo fare delle ricerche senza che utilizzo le stored vado attraverso queste istruzioni a prendermi i record precisi.
Sbaglio?

Alla fine nei post precedenti avevamo detto che la parte riguardante il db e le sue query di interrogazione ed altro era meglio farle attraverso sp sul db direttamente...

Ciao e grazie come sempre della tua disponibilità
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Sbaglio?
>Alla fine nei post precedenti avevamo detto che la parte riguardante
>il db e le sue query di interrogazione ed altro era meglio farle
>attraverso sp sul db direttamente...
Ci sono cose che è sempre meglio fare su database. Tutte le operazioni set based, le aggregazioni, ecc.. Però ci sono casi in cui una procedura deve tornare dati per più applicazioni. E in alcuni casi, ad esempio, l'ordinamento è differente. Siccome la quantità dei dati è la stessa ma ordinare su db potrebbe essere controproducente, può essere utile fare due order by linq in base all'applicazione che chiama..
Oppure, se devi gestire caching in memoria, o gestire oggetti che sono solo in memoria e non su db.. In quei casi, non esistendo il db, puoi usare linq.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

In pratica io programmo interamente su db attraverso sp (select,insert,update,delete ecc)...poi prelevo i dati e li carico sull'applicazione...Quindi stando a quello che di solito faccio a me conviene rimanere cn le sp...creare ad hoc delle list e caricarle sull'applicazione che di solito sn griglie oppure report...Nei casi in cui debba caricare in sequenza una serie di record e questi poi devono essere gestiti durante il proseguimento dell'applicazione per esempio selezionare alcuni record per comune o città allora utilizzo le istruzioni del linq anche perchè quando l'applicazione si chiude i dati in memoria vengono svuotati...in pratica io prima utilizzavo i dataset per caricare i dati presi dalle stored ora debbo utilizzare le collection. Tutto qui mi sembra di capire e se occorre eseguire delle operazioni solo sull'applicazione allora utilizzo le istruzioni del linq altrimenti se devo se,pre seguire operazioni sul db allora la sp resta la migliore soluzione. Erro?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>in pratica io prima utilizzavo i dataset per caricare i dati presi dalle stored ora
>debbo utilizzare le collection. Tutto qui mi sembra di capire
>e se occorre eseguire delle operazioni solo sull'applicazione
>allora utilizzo le istruzioni del linq altrimenti se devo se,pre
>seguire operazioni sul db allora la sp resta la migliore soluzione.
>Erro?
no, è corretto. Strutture in memoria più snelle ti consentono di essere più veloce e prestante. Poi con linq hai strumenti veramente avanzati, tanto da rendere praticamente nullo l'utilizzo dei dataset. Alla fine puoi quasi scrivere delle select addirittura..
Stai attento solo ad una cosa, la logica di business, non sempre è buona norma metterla su db. Pensa solamente all'eventualità di dover cambiare piattaforma, oppure di scalare in maniera orizzontale parallelizzando i processi.
Sql server col suo motore scala e parallelizza, ma certe cose, per cui un giorno potenzialmente dovrai fare multithread, ti conviene tenerle fuori dal contesto del database.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Perfetto ho capito, per ora in base al mio progetto continuo con le stored su db perchè non devo gestire multithread, richiamo i dati e li passo in collection e poi se debbo fare delle ricerche all'interno di queste liste allora utilizzo il linq. Ottimo grazie mille...ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Perfetto ho capito, per ora in base al mio progetto continuo
>con le stored su db perchè non devo gestire multithread, richiamo
>i dati e li passo in collection e poi se debbo fare delle ricerche
>all'interno di queste liste allora utilizzo il linq. Ottimo grazie
>mille...ciao
e di che? sono un piacere i post in cui si discute di scelte e tecniche
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

trinity Profilo | Guru

Ciao Alex, riapro di nuovo al volo il capitolo del passaggio delle collection list ai report per evitare di utilizzare i dataset...Mi chiedevo dato che in questi ultimi giorni sto utilizzando come demo un nuovo tool per i report che si chiama Telerik, e sto facendo delle prove..secondo tutto quello che abbiamo detto in questo post pensi che il codice che ti posto sia quello giusto? Ossia passare anche un Enumerable?


Imports System.Collections.Generic Public Partial Class ProductList Inherits Report Public Sub New() InitializeComponent() ' Create a generic list of Product and ' add sample products Dim products As New List(Of Product)() products.Add(New Product("bicycle")) products.Add(New Product("helmet")) products.Add(New Product("shoes")) ' Assign the generic list as the report DataSource Me.DataSource = products End Sub End Class ' A very simple class with a single Name property Public Class Product Private _name As String Public Sub New(ByVal name As String) _name = name End Sub Public Property Name() As String Get Return _name End Get Set _name = value End Set End Property End Class
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Ciao Alex, riapro di nuovo al volo il capitolo del passaggio
>delle collection list ai report per evitare di utilizzare i dataset...Mi
>chiedevo dato che in questi ultimi giorni sto utilizzando come
>demo un nuovo tool per i report che si chiama Telerik, e sto
>facendo delle prove..secondo tutto quello che abbiamo detto in
>questo post pensi che il codice che ti posto sia quello giusto?
>Ossia passare anche un Enumerable?
Noi usiamo Telerik da un po', però solo per WPF per ora.. quindi di certo il datasource di quel tipo di applicazione supporta IEnumerable..
Dovresti dare un'occhiata alla proprietà sorgente che cosa si aspetta, dovrebbe dirtelo anche la documentazione di terze parti.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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