Errore DataSet per Report, StoredProcedure basata su function che util...

venerdì 06 aprile 2012 - 18.37
Tag Elenco Tags  C#  |  .NET 2.0  |  Visual Studio 2005  |  SQL Server 2005

skraus Profilo | Junior Member

Salve, sono un pò di giorni che giro a vuoto su di un problema.

Ho una web application ASP.NET (C#) che gestisce per ogni mese le ore di presenza fatte dalle persone di varie aziende.
In detta web application ho esigenza di aggiungere un report dei dati presenza di un mese specifico, per un dipendente specifico.

Nel DB (SQL Server 2005), vengono salvati solo i record relativi ai giorni in cui il dipendente è stato presente (ossia ha fatto un numero di ore > 0), mentre sono mancanti quelli in cui il dipendente è assente (Ferie, Malattia, festività, ecc).

Nel medesimo database mi sono creato due funzioni basate su assembly (c#): get_GiorniFromMeseAnno (@mese, @anno) e get_SmallDateTime (@giorno, @mese, @anno); la prima mi restituisce il numero di giorni del mese ed anno identificato dai parametri, mentre le seconda mi restituisce uno data smalldatetime in base al giorno, mese ed anno identificati mediante i parametri di input.

Ho utilizzato queste due funzioni in più stored procedure e non ho avuto mai problemi (fino ad ora).

Mi sono creato la seguente stored procedure che mi restituisce i dati di presenza di un intero mese di una persona.

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

Ho quindi aggiunto un report (.rdlc) e mi sono creato un dataset tipizzato basato sulla SP di cui sopra. Qui mi si presenta il problema, quando vado a confermare la creazione dei metodi Fill e GetData, mi viene mostrato un messaggio:

668x514 129Kb


Non mi resta che fare clic sul tasto Fine. Naturalmente non mi viene mostrato alcun campo come risultato della SP.

Spero di essere stato abbastanza chiaro ed esaustivo.

Avete suggerimenti su come risolvere il problema, oppure per bypassarlo ?
Grazie in anticipo a tutti.
Sk

freeteo Profilo | Guru

Ciao,
purtroppo non ho esperienza diretta con questo tipo di problema, sostanzialmente perchè non faccio uso di DataAdapter, DataSet etc...da un bel po' di anni.
Solitamente preferisco lavorare con collection tipizzate, e farmi la mappatura dei campi o tramite EF (Entity Framework) oppure direttamente "a mano" tramite ado.net, quindi usando la connection, esecuzione della query e l'associazione delle proprietà ai valori dei campi.

Ti chiedo, come mai tu usi dataadapter? ti servono solo per il report oppure anche nell'applicazione vera e propria?
Se fosse solo per il report, puoi tranquillamente bypassare il problema facendo in quella maschera una query finta che ti torni la struttura che ti interessa, senza chiamare la tua stored, ma costruendo i campi anche fittizi come ad esempio:
SELECT 1 as numero, '' as descrizione etc.... FROM tabella WHERE...
così facendo non viene fatto niente a livello db, ti basta avere i campi che poi passerai a codice al report, in quel momento usando la tua stored da codice, tanto al report non interessa come sono arrivati se gli passi i dati tu da codice tramite il metodo "SetDataSource"...

Ciao.

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

skraus Profilo | Junior Member

Ti ringrazio per i tuoi suggerimenti. Nel caso illustrato nel mio post quello che viene utilizzato è un TableAdapter e lo utilizzo solo finalizzato al Report che devo generare.

Purtroppo non posso applicare il tuo suggerimento al mio caso in quanto la mia SP, riportata nel post, restituisce il contenuto di una variabile table che viene generata e riempita nell'esecuzione della stessa sp per cui non saprei come fare una query "finta" sui medesimi campi.

Sk

freeteo Profilo | Guru

Ciao Sk, perdona il ritardo nella risposta.
Se non puoi toccare niente di quello che arriva dal db, ti conviene lavorare a codice allora, facendoti la query e preparandoti quello che ti serve visualizzare dopo che hai eseguito la stored e utilizzato il risultato per costruirti magari una Collection<T> di tuoi oggetti da passare al report.

Per costruire il report puoi farti una query da qualsiasi parte, anche un db access, non ha importanza tanto come ti dicevo,gli passi i dati come Collection<T>.
Tutto funziona senza intoppi se le proprietà dell'oggetto che gli passi hanno lo stesso nome e tipo, delle colonne con cui hai generato il report.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5