Recupero elenco campi da datareport vuoto

di il
5 risposte

Recupero elenco campi da datareport vuoto

Ciao a tutti,
il mio utente scrive una query SQL e io la eseguo creando un datareport con un System.Data.SqlClient.SqlCommand.
Utilizzando .GetName(i) mi prendo i nomi dei campi restituiti dalla select, mi servono per definire un formato di file txt in una proedura di export parametrico.
La cosa non funziona quando il DB è ancora vuoto e l'SQLCommand non restituisce alcun record.
Come posso arrivare all'elenco dei campi della select scritta dall'utente? (mi servono i valori della select indicata, non i nomi della o delle tabelle interessate)

Grazie

Paolo

5 Risposte

  • Re: Recupero elenco campi da datareport vuoto

    0) dal risultato della SELECT vuota, NON SI PUO'

    1) potresti fare il PARSING della SELECT e dedurre i nomi dele colonne dalla sintassi -> complicato
    2) potresti ricuperare i nomi delle colonne dalle informazioni di sistema offerte dal database (ci sono tabelle di servizio che contengono i nomi di tutte le tabelle e l'elenco dei campi) in base alle tabelle usate -> complicato

    3) cabli nel codice il nome delle colonne -> facile
    4) generi un report diverso con scritto: ""non ci sono dati"" -> facile

    Non si puo' cavar sangue da una rapa
  • Re: Recupero elenco campi da datareport vuoto

    Ciao e grazie per la risposta.

    >0) dal risultato della SELECT vuota, NON SI PUO'

    Si, ci avevo già sbattuto il muso

    >3) cabli nel codice il nome delle colonne -> facile
    >4) generi un report diverso con scritto: ""non ci sono dati"" -> facile

    La tre non l'ho capita!! e la quattro non va bene

    Ti spiego meglio.

    Ho fatto una procedura di export parametrico nella quale l'utente mi indica, oltre ad un altro centinaio di parametri, la select che deve essere eseguita per estrarre i dati.
    Quando il tipo di file prodotto è di tipo testo (sia fisso che delimitato con ovvie differenze tra i due) mi serve che mi vengano descritte alcune caratterstiche del tracciato. Per semplificare le operazioni all'utente gli mostro in una grid editabile l'elenco dei campi prodotti dalla select specificata dove poi l'utente mi aggiungere dimensioni, tipo, etichetta etc etc.
    Purtroppo spesso l'utente crea il processo di export col DB ancora vuoto e quindi il metodo finora utilizzato non funziona.

    temo che
    >1) potresti fare il PARSING della SELECT e dedurre i nomi dele colonne dalla sintassi -> complicato
    sia l'unica strada

    In allegato l'esempio di come funziona. L'utente scrive una query, clicca su "definisci campi" e io devo riempirgli la griglia sottostante


    Paolo
    Allegati:
    30951_f48aea5c7c8ef9486d122d695c6c2023.jpg
    30951_f48aea5c7c8ef9486d122d695c6c2023.jpg
  • Re: Recupero elenco campi da datareport vuoto

    Aggiungo che in alcuni casi il command.text che vado ad eseguire è una stored procedure
  • Re: Recupero elenco campi da datareport vuoto

    Il problema è che lasci all'utente scrivere la query liberamente, e fare il parsing di questo è complicato.
    Potrebbe scrivere di tutto, anche una INNER JOIN o altro, come prevedi il parsing ??
    Potresti invece fare prima di tutto una scansione del DB ricavandoti la lista delle tabelle in essa contenute, e far scegliere all'utente su quale tabella vuole fare la select.
    A questo punto fai una scansione dei campi contenuti in quella tabella, e mostri la lista dei campi come nel tuo esempio da dove l'utente potrà scegliere.
    A questo punto all'utente lasciamo la possibilità di specificare solo la parte WHERE della query e poi ricostruiamo il tutto componendo le varie parti.
  • Re: Recupero elenco campi da datareport vuoto

    Purtroppo le queries sono sempre molto complesse. Riguardano generalmente molte tabelle, ma anche diversi db. In alcuni casi sono pivot. In altri ancora sono così complicate che l'utente si scrive una stored procedure....
    Non mi interessa una cosa molto approfondita perchè sono solo i campi espressamente indicati nella select ad interessarmi e, alla fine, mi serve solo il nome.
    Però credo che almeno il caso stored procedure mi freghi....

    Se eseguo una query qualsiasi con SQL Management studio, ottengo l'elenco dei campi anche quando non sono presenti records. Speravo si potesse fare qualcosa, non sul datareader. ma magari sull' SQLCommand...
Devi accedere o registrarti per scrivere nel forum
5 risposte