Visibilità reference a oggetti

lunedì 19 gennaio 2009 - 13.16

Leonida Profilo | Junior Member

Ciao a tutti,

Ho scritto un metodo di una classe che istanzia un oggetto Command e un Reader ,in funzione del tipo di database letto usando un is su un parametro.

L'istanziazione viene eseguita all'interno di una serie di if. Il problema è che quando leggo le tuple restituite dalla select in sequenza tramite un while esternamente agli if, non riconosce gli oggetti istanziati.

Il codice è il seguente:

public string[] SelezionaNazioni(DbConnection connessione)
{
string[] nazioni = null;
string query = " SELECT Nome " +
" FROM Nazioni;";

...

// Istanzia un oggetto Command e un Reader in funzione del tipo di database

if (connessione is OleDbConnection)
{
OleDbCommand com = new OleDbCommand(query, (OleDbConnection)connessione);
OleDbDataReader cursore = com.ExecuteReader();
}

if (connessione is SqlConnection)
{
SqlCommand com = new SqlCommand(query, (SqlConnection)connessione);
SqlDataReader cursore = com.ExecuteReader();
}

if (connessione is OracleConnection)
{
OracleCommand com = new OracleCommand(query, (OracleConnection)connessione);
OracleDataReader cursore = com.ExecuteReader();
}

// legge le tuple risultanti della query
while(cursore.Read())
{
...
}

...

return nazioni;
}

Mi sembra poco pulito definire il while all'interno di ogni if. Non trovo la discendenza di DataReader e dichiarandolo esternamente come un generico object ed eseguendo un casting, chiaramente non mi funziona.

Come sempre sto usando visual studio 2005, potete aiutarmi?

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao!

>Come sempre sto usando visual studio 2005, potete aiutarmi?
Che ne dici invece di usare la IDBConnection. Questa è l'interfaccia comune a tutte le connessioni.
Dichiari una variabile di tipo IDBConnection, e poi in base a come ti arriva il parametro assegni ad essa il tipo di connessione adatto.
Questo ti permette di dichiarare la variabile fuori dagli if..


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Leonida Profilo | Junior Member

Si infatti lo faccio per la gestione della connessione al DB che ho implementato in modo generico usando la classe padre per la dichiarazione dei reference, ma non trovo la classe padre di DataReader che invece viene implementato con la stessa firma per ogni tipologia di DB.

alx_81 Profilo | Guru

>Si infatti lo faccio per la gestione della connessione al DB
>che ho implementato in modo generico usando la classe padre per
>la dichiarazione dei reference, ma non trovo la classe padre
>di DataReader che invece viene implementato con la stessa firma
>per ogni tipologia di DB.
e questa?
http://msdn.microsoft.com/it-it/library/system.data.common.dbdatareader(VS.80).aspx

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Leonida Profilo | Junior Member

Mmmh, sembra funzionare, ok ti ringrazio...
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5