Errore metodo overload

martedì 02 dicembre 2008 - 10.00

freebreathe Profilo | Newbie

Ho creato questa classe che fa un collegamento ad un Table Adapter per aggiornare un campo in una tabella. In pratica deve solo mettere a True il campo assegnato.

Questo ilcodice della classe:


public static bool AggiornaStatoAssegnazioneOpinione(long idArticolo)
{
ArticoliTableAdapters.QueriesTableAdapter ta =
new DAL_articoli.ArticoliTableAdapters.QueriesTableAdapter();
try
{
ta.AggiornaAssegnazioneOpinione(idArticolo);
return true;
}
catch(Exception)
{

return false;
}
finally
{
ta.Dispose();
}
}


Questo invece è il codice sql presente nel Table Adapter richiamato

UPDATE dbo.Opinione
SET assegnato = 1
WHERE (idRubrica = @idArticolo)


Ma quando compilo mi restituisce questo errore

La corrispondenza migliore del metodo di overload per 'DAL_articoli.ArticoliTableAdapters.QueriesTableAdapter.AggiornaAssegnazioneOpinione(int)' presenta alcuni argomenti non validi

Argomento '1': impossibile convertire da 'long' a 'int'

Qualcuno saprebbe spiegarmi cosa sbaglio?

rossimarko Profilo | Guru

Ciao,

è sbagliato il tipo di parametro passato alla funzione.. La tua funzione accetta un long, mentre la ArticoliTableAdapters.QueriesTableAdapter.AggiornaAssegnazioneOpinione penso voglia un int (non si vede dal codice che hai postato, ma dall'errore direi che è quello).

Ovviamente il compilatore ti dice che non è possibile fare una conversione implicita da long a int perchè potrebbe esserci una perdita di dati
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

freebreathe Profilo | Newbie

Si penso sia questo il problema ma non so come risolvere.
Se lo faccio a mano, ovvero se anziché passare idArticolo passo direttamente un numero, il codice funziona.

Questo è il codice modificato che funziona

public static bool AggiornaStatoAssegnazioneOpinione(long idArticolo)
{
ArticoliTableAdapters.QueriesTableAdapter ta =
new DAL_articoli.ArticoliTableAdapters.QueriesTableAdapter();
try
{
ta.AggiornaAssegnazioneOpinione(152);
return true;
}
catch(Exception)
{

return false;
}
finally
{
ta.Dispose();
}
}

COme vedi al posto di idArticolo ho inserito 152 che è l'id della tabella che mi interessa modificare. Compilando non da errore ed eseguendo funziona.
Ora come faccio a sostituire 152 con idArticolo?

rossimarko Profilo | Guru

Il problema è la dichiarazione della tua funzione

public static bool AggiornaStatoAssegnazioneOpinione(long idArticolo)

cambiala mettendo

public static bool AggiornaStatoAssegnazioneOpinione(int idArticolo)


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

freebreathe Profilo | Newbie

Il problema è che non posso cambiare idArticolo perché la classe di cui sopra viene richiamata da questa che riporto qui sotto

protected void cmdConferma_Click(object sender, EventArgs e)
{

long idArticolo = Convert.ToInt64(hIdArticolo.Value);
if (idArticolo != 0)
{
Articolo.AssegnaOpinioneASito(idArticolo, listaSito);
Articolo.AggiornaStatoAssegnazioneOpinione(idArticolo);
}

}

COme vedi il valore viene qui settato a long e poi passato sia a AssegnaOpinioneASito che a AggiornaStatoAssegnazioneOpinione. Per il primo non ci sono problemi, ma per il secondo restituisce messaggi di errore

rossimarko Profilo | Guru

Però mi sa che c'è qualche incongruenza perchè a questo metodo AggiornaAssegnazioneOpinione devi passare un int. L'alternativa è modificare il metodo AggiornaAssegnazioneOpinione specificando che il parametro deve essere di tipo long
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

freebreathe Profilo | Newbie

Ho trovato quale era il problema.
Nelle proprietà del Table Adapter, alla voce Execute mode dovevo mettere Non Query e non Scalar come mettevo io.
Appena ho fatto questa modifica ha funzionato alla grande.
Cmq grazie per la pazienza
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