311 messaggi dal 25 novembre 2010
salve a tutti, auguri di buon anno.
ho un picolo problema con una tabella Sql Server.
in pratica in questa tabella ci sono solo campi int con i seguenti valoi: 0,1,2,3,30.
ognuno di questa valori corrispone a uno stato (start,stop,...).
io dovrei fare in modo che questa vlori numerici vengano trasformati nei relativi stati senza toccare il db.
in sostanza nn posso aggiungere un campo o una tabella apposita.
mi è stato detto che è possibile farlo via codice/app.config, ma nn ho idea di come.
qualcuno può indicarmi se e come è possibile fare ciò??
678 messaggi dal 12 maggio 2001
www.idioteca.it
buon anno anche a te.
Venendo al tuo problema, diciamo che, senza pensarci troppo, hai due soluzioni principali:
1. uso del web.config
nell'area appsetting aggiungi tanti elementi quanti sono quelli memorizzati a db impostando il valore della proprietà "Key" con il valore contenuto nel db e il valore della proprietà "value" con quella dello stato che devi recuperare.

Es.
<add key="0" value="STOP"/>
<add key="1" value="START"/>
<add key="2" value="ALTRO STATO"/>
ecc. ecc.

Da codice non farai altro che recuperare la chiave dal web.config passandogli come Key il valore recuperato dal db.
Io generalmente utilizzo una funzione che metto in una classe con tutte le funzioni generiche e a cui passo come parametro quello che devo andare a trovare nel web.config.

Public Shared Function funRecuperaParametriWebConfigLocale(ByVal strParametro As String) As String
        Dim strReturn As String = String.Empty

        strReturn = TryCast(ConfigurationManager.AppSettings.Get(strParametro), String)

        Return strReturn
    End Function
' Che richiamo in questo modo:
'
dim strDescrizioneStato as string = funRecuperaParametriWebConfigLocale(valoreRecuperatoDaDb)


In questo modo se aggiungi un nuovo stato nella tabella, devi ricordarti di aggiungere il suo corrispettivo nel web.config, ma non devi modificare il codice e ricompilare l'applicazione

2. tutto da codice
Fai tutto quello che ti ho descritto sopra all'interno di una classe in cui definisci delle variabili/costanti globali e verifichi con degli if then else quale variabile andare a recuperare.
Ovviamente questo sistema ti costringe a modificare, ricompilare e ripubblicare ogni volta che aggiungi un nuovo stato.

C'è una soluzione che comprende l'unione delle due precedenti, ma avresti gli svantaggi di entrambe e a questo punto punterei sulla soluzione 1.
Come vedi ho usato vb, ma la conversione in c# è abbastanza banale e penso che potrai farla velocemente, se servisse.
ciao
311 messaggi dal 25 novembre 2010
ciao!
intanto grazie per la risposta.
ho optato per l'opzione 1.
ho aggiunto le voci nel Web.config.
dopo di che ho creato una classe:
    public class Stato
    {
        public string recuperaStato(string parametro)
        {
            string retVal = string.Empty;

            return retVal;
        }
    }

purtroppo il VB nn lo conosco per niente.
devo usare c#.
mi manca di trasformae questa riga:
strReturn = TryCast(ConfigurationManager.AppSettings.Get(strParametro), String)
sperando di aver fatto il resto giusto.

e poi, la riga
dim strDescrizioneStato as string = funRecuperaParametriWebConfigLocale(valoreRecuperatoDaDb)
la richiami nel code behind della pagina giusto??
156 messaggi dal 01 dicembre 2010
molto interesante la risposta di giangi77 e questa sera per esercitarmi tentero di metterla in pratica ( Mi interessa molto imparare rapidamente ASP
_________________________________________________________
Comunque io che arrivo dai Data Base farei un SQLDataSource
e all'interno di questo inserirei ( c'è il generatore di query )
la seguente formula per trasformare i dati numerici in testo
____________________________________________________________

CASE WHEN AAId = CAST(1 AS nvarchar) THEN 'uno' ELSE CASE WHEN AAId = CAST(2 AS nvarchar) THEN 'due' ELSE CASE WHEN AAId = CAST(3 AS nvarchar) THEN 'tre' ELSE CASE WHEN AAId = CAST(4 AS nvarchar) THEN 'quattro' ELSE CASE WHEN AAId = CAST(5 AS nvarchar) THEN 'cinque' ELSE 'altro' END END END END END

Questo esempio (Testato) ti trasforma i valori del campo ' AAId '
il numero 1 diventa 'uno'
il numero 2 diventa 'due'
il numero 3 diventa 'tre'
il numero 4 diventa 'quattro'
il numero 5 diventa 'cinque'
tutti gli altri numeri 'altro'
____________________________________________________________
se tu volessi aggiungere anche il sei devi sostituire alla parola
'altro' apici compresi il frammento
CASE WHEN AAId = CAST(6 AS nvarchar) THEN 'sei' ELSE 'altro' END
________________________________________________________________
Questo lo puoi fare per 10/20 valori Ma penso che ti bastano.
Usa il web.config nel caso un domani gli stati cambino o se ne aggiungano di nuovi (anche se per trattarli dovrai ricompilarE)

Ormai programmano tutti... ma la professionalità appartiene a pochi
311 messaggi dal 25 novembre 2010
manuel0081 ha scritto:
Usa il web.config nel caso un domani gli stati cambino o se ne aggiungano di nuovi (anche se per trattarli dovrai ricompilarE)

infatti preferisco usare il Web.config, solo che nn riesco a fare la traduzione dal VB al C# in quanto di VB ne so zero!
potrebbe andare anche così:
using System.Configuration;

private static Configuration config;

public string funRecuperaParametriWebConfigLocale(string strParametro)
{
    return config.AppSettings.Settings[strParamentro].Value;
}

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
-Albert Einstein-
311 messaggi dal 25 novembre 2010
in compilazione nn da errori.
ho creato una classe e l'ho messa nella cartella App_Code (come mi pare di aver capito si debba fare).
nel code behind della pagina ho scritto questo:
        protected void Page_Load(object sender, EventArgs e)
        {
            string stato = Stato.recuperaStato("campo");
        }

ma il campo che mi serve come lo recupero?
devo fare una connessione apposita o posso usare una di quelle che ho negli SqlDataSource sulla pagina?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.