GridView, SqlDataSource e parametri

venerdì 20 marzo 2009 - 21.07

LuxSkyWalker Profilo | Junior Member

Ciao a tutti...

Altro problema sicuramente causato dalla mia poca esperienza, anche se io ci vedo qualche forza malefica dietro perchè non riesco a capire il perchè di questo mistero...

Allora: ho una gridview da popolare con dei dati, che devono variare a seconda del ruolo dell'utente che ha fatto l'accesso.
L'utente si autentica tramite una matricola che invio ad un webservice, il quale mi risponde con il cognome, con il ruolo e con l'abilitazione (o meno) a compiere determinate operazioni.
La gridview si popola da una query: se l'utente è di tipoA, i dati vengono estratti da una select sul db(oracle). Se l'utente è di tipoB, i dati vengono estratti dalla medesima query, che però ha un controllo in più nella clausola where.Questo controllo prevende il confronto di un campo con un parametro, passato in stile oracle (:parametro).
Il grid si binda con il sqldatasource.

Ecco il codice:
private void popolaGrid(string parametro)
{
if (parametro== "")
{
//Blocco IF
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataSet;
SqlDataSource1.ProviderName = "System.Data.OracleClient";
SqlDataSource1.ConnectionString = ConnectionString;
SqlDataSource1.SelectCommand = @"SELECT (IBGRUP.IBD21T00.CAGZI || ' - ' || IBGRUP.IBD24T00.TAGZI),
SUM(IBGRUP.IBD21T00.ISICI),
count(IBGRUP.IBD21T00.CAGZI)
FROM IBGRUP.IBD21T00 INNER JOIN IBGRUP.IBD24T00
ON (IBGRUP.IBD21T00.CCMGI_GUPO_RE9L = IBGRUP.IBD24T00.CCMGI_GUPO_RE9L)
AND(IBGRUP.IBD21T00.CAGZI = IBGRUP.IBD24T00.CAGZI)
WHERE (IBGRUP.IBD24T00.CCMGI_GUPO_RE9L= '1')
AND (IBGRUP.IBD21T00.DSONO_PLZA IS NULL)
GROUP BY IBGRUP.IBD21T00.CAGZI, IBGRUP.IBD24T00.TAGZI";
gridview1.DataSource = SqlDataSource1;
}
else
{
//Blocco ELSE
SqlDataSource2.DataSourceMode = SqlDataSourceMode.DataSet;
SqlDataSource2.ProviderName = "System.Data.OracleClient";
SqlDataSource2.ConnectionString = ConnectionString;
Parameter parametro_sql = new Parameter(parametro);
SqlDataSource2.SelectParameters.Add(parametro_sql);
SqlDataSource2.SelectCommand = @"SELECT (IBGRUP.IBD21T00.CAGZI || ' - ' || IBGRUP.IBD24T00.TAGZI),
SUM(IBGRUP.IBD21T00.ISICI),
count(IBGRUP.IBD21T00.CAGZI)
FROM IBGRUP.IBD21T00 INNER JOIN IBGRUP.IBD24T00
ON (IBGRUP.IBD21T00.CCMGI_GUPO_RE9L = IBGRUP.IBD24T00.CCMGI_GUPO_RE9L)
AND(IBGRUP.IBD21T00.CAGZI = IBGRUP.IBD24T00.CAGZI)
WHERE (IBGRUP.IBD24T00.CCMGI_GUPO_RE9L= '1')
AND (IBGRUP.IBD21T00.DSONO_PLZA IS NULL)
AND (Lcase(IBGRUP.IBD24T00.MSE9A_CMCL)=:parametro_sql
OR Lcase(IBGRUP.IBD24T00.MSE9A_AXRV)=:parametro_sql
OR Lcase(IBGRUP.IBD24T00.MSE9A_RSMI_GSTT)=:parametro_sql
OR Lcase(IBGRUP.IBD24T00.MSE9A_FRR9_DNNI)=:parametro_sql
OR Lcase(IBGRUP.IBD24T00.MCAPO_AREA)=:parametro_sql)
GROUP BY IBGRUP.IBD21T00.CAGZI, IBGRUP.IBD24T00.TAGZI";
gridview1.DataSource = SqlDataSource2;
}
gridview1.DataBind();
}

Veniamo al problema.
Se parametro == "", nessun problema, la griglia viene popolata.
Se invece non è stringa nulla, la gridview non viene popolata, nonostante la query sia sintatticamente corretta e se eseguita direttamente dal client del db, tira su i dati giusti.
Allora ho pensato che non avvenisse in maniera giusta il passaggio del parametro alla select, e invece esempi trovati su internet e il manuale di ASP.NET che ho in ufficio, dice che è cosi che si passano i parametri con oracle.
Allora per disperazione, ho copiato il codice contenuto nel blocco IF e l'ho copiato nel blocco ELSE. In sostanza, entrambi i blocchi dovrebbero popolare la grid con gli stessi dati.
E invece il blocco IF riempie la griglia, il blocco ELSE no!!!

Da cosa dipende questo?Ha una spiegazione logica (informaticamente parlando!) o ho il pc infetto da qualche forza misteriosa???
LuxSkyWalker
Junior Developer .NET

Jeremy Profilo | Guru

Ciao Gianluca.
Hai provato a mettere dei punti di interruzione per capire, in debug, se il codice viene eseguito???

Facci sapere....
Ciao

LuxSkyWalker Profilo | Junior Member

Ciao Jeremy,
certo ho messo un breakpoint sul controllo IF...fa tutto corretto, cioè in base al parametro va nel blocco IF o nel blocco ELSE...il problema è che mettendo lo stesso codice dentro i 2 blocchi, il blocco IF popola correttamente la gridview, il blocco ELSE no!!!
LuxSkyWalker
Junior Developer .NET

Jeremy Profilo | Guru

Ciao Gianluca.
>ho il pc infetto da qualche forza misteriosa???
Da quello che vedo e da quello che indichi ho paura che il tuo dubbio riguardo alle forze malefiche abbia un qualcosa di fondato.

Se hai fatto copia e incolla del codice sia nel blocco If sia in quello Else e non va lo stesso allora ....mi dispiace ma non saprei che dirti.

Ad ogni modo ... facci sapere.
Ciao

LuxSkyWalker Profilo | Junior Member

Già...sicuramente c'è qualcosa di malefico...domani tornerò in ufficio a provare a risolvere il caso...se vincerò, ti farò sapere...
LuxSkyWalker
Junior Developer .NET
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