.NET 2.0 e oracle client 9

martedì 09 ottobre 2007 - 08.29

elsinore Profilo | Junior Member

Ciao a tutti,

una domnada semplice ma l'oracle client 9 è supportato da .NET 2.0??

No perchè ho un'applicazione che funzionava con il client 10 ma con il 9 nn va...... nelle references del mio progetto non trovo OracleDataAccess.dll !

Ci sono alternative per fare funzionare il tutto con il 9??

grazie!

stellaga Profilo | Newbie

Ciao, io ho usato per delle mie applicazione sia il client ver. 8, sia il 9 che il 10 senza problemi e senza cambiare niente.
Comunque ho usato le classi native del .net framework per interfacciarmi con Oracle, cioè : System.Data.OracleClient .
Ma l'errore che riscontri qual'è?, perchè ad esempio se non hai determinati permessi sulla cartella che contiene il client, ASP.NET genera un errore, quindi se puoi essere più preciso.....
Gaetano Stella

elsinore Profilo | Junior Member

Ciao,

ti spiego a che punto sono...... io ho una web application sviluppata con asp.net 2.0 e con Oracle client 10.......

il mio cliente però usa il client 9, quindi mi sono disinstallato il 10 installato il 9 per ricompilare le classi che siconnettono al DB, e qui i lproblema, quando compilo mi dice

'Oracle.DataAccess.Client.OracleDataReader' does not contain a definition for 'HasRows'

il tutto nel codice è dichiarato così

OracleDataReader RS;

RS = cmd.ExecuteReader();
....

if (RS.HasRows)
.....

Da notare che nelle reference del mio progetto ho tolto la dll oracle.DataAccess (della vers 10) ed ho aggounto quella della 9... solo che navigando in giro mi hanno detto che il metodo hasrows esiste dalla 10 in poi, qundi che posso fare?

devo per forza usare la 10 o ci sono vie alternative?

grazie!

stellaga Profilo | Newbie

perchè non provi ad usare al posto di if (RS.hasRows) if (RS.Read()) . se RS è vuoto ti da false altrimenti RS si trova posizionato sul primo record e lo puoi elaborare. se devi scandire tutti i record ovviamente usi while (RS.Read()) { ..istruzioni.. }
Gaetano Stella

elsinore Profilo | Junior Member

Ciao ti ringrazio, ho provato e ora compila.....solo che non capisco perchè, non mi trova i dati corretti......ho debuggato e nel codice, ad esempio qui


public void showResults(string SQLQueryString)
{
if (findFlag == true)
{
if (Record.Read())
{
while (Record.Read())
{
object testo = Record.GetValue(0); // prima colonna del DB
string ItemTesto = testo.ToString();
TextBox1.Text = ItemTesto;

dove la query restituisce un risultato......entro nell'if ma non nel while!! nn capisco perchè....


poi altra cosa strana.....un semplicissimo bottone nn si vede più quando apro dal browser la pagina aspx......ma che è? l'oracle client fa tutti sti scherzi??

stellaga Profilo | Newbie

attenzione devi togliere la if(RS.Read) perchè è superflua e ti crea problemi perchè ti sposta il cursore al primo record e quindi quando fai di nuovo rs.read dentro il while ti porta al secondo quindi perdi il primo record.
Ripeto elimina la if perchè è contemplata già nella while in quanto se il datareader è vuoto ritorna false e quindi il ciclo non viene eseguito
ok?
Gaetano Stella

elsinore Profilo | Junior Member

ti ringrazio..... sei stato gentilissimo.....ora funziona tutto!

ftrotta Profilo | Newbie

Ciao. Hai a disposizione qualche link che spieghi i passi per l'installazione e la configurazione del client Oracle per versione 9 in modo da poter essere utilizzato per ASP.NET 2.0? Sto avendo dei problemi...

Ti ringrazio

elsinore Profilo | Junior Member

Ciao,

mah, in rete c'è tanta documentazione......che tipo di problemi hai?

ftrotta Profilo | Newbie

1) Ho installato il client scaricandolo dall'indirizzo http://www.oracle.com/technology/software/products/oracle9i/htdocs/winsoft.html

2) Ho assegnato i diritti di lettura e scrittura alla directory /bin dell'installazione

3)Il codice che eseguo nella pagina ASP.NET (2.0) è molto semplice (ho omesso le informazioni riservate).

using System.Data.OracleClient;

...

OracleConnection connection = new OracleConnection("Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = <omissis>)(PORT = 1521)))(CONNECT_DATA =(SID = IASDB)))\";User Id=<omissis>;Password=\"<omissis>"");

connection.Open();

connection.Close();

4) Il risultato che ottengo è un'eccezione
Per utilizzare System.Data.OracleClient è necessario il software client per Oracle versione 8.1.7 o successiva.

Ti faccio presente che se utilizzo sqlplus con la medesima stringa di connessione riesco a connettermi alla base di dati e ad eseguire i comandi di cui ho bisogno.

Hai qualche dritta?

Ti ringrazio

elsinore Profilo | Junior Member

Nel web.config dell'applicazione ci dovrebbe essere scritta la versione di oracle che stai usando......qual'è?

ftrotta Profilo | Newbie

<add assembly="System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

elsinore Profilo | Junior Member

dire che non va bene

devi mettere la verisone del client che stai usando....

la verisone la vedi facendo add reference sul progetto...ti cerchi il tuo oracle.data.access e copi la versione......e dovrebbe funzionare..

ftrotta Profilo | Newbie

Ho risolto scaricando ed installando ODP.NET (http://www.oracle.com/technology/software/tech/windows/odpnet/index.html) ed impostando la variabile di ambiente ORACLE_HOME alla directory di installazione (nel mio caso /oracle/ora92).

Invio il comando SELECT ISCRITTO_ING('206318', 'SPDMSM76D20D653D') FROM DUAL; e cerco di leggere la risposta con un OracleDataReader, ma ottengo la seguente eccezione.

Tipo di dati della colonna non supportato

Hai qualche informazione al riguardo?
Come puoi notare, non è una classica select, ma richiama una funzione.

elsinore Profilo | Junior Member

ma la versione nel web.config l'hai cambiata?

stellaga Profilo | Newbie

La funzione che tipo ritorna?, comunque in generale per utilizzare una funzione oracle con l'assembly nativo ms, devi utilizzare il seguente codice:
questa è il codice utilizzato per una funzione scritta da me in un mio programma
OracleCommand cmd = new OracleCommand();
// calcolo festività costanti
cmd.CommandText = "calcolofestivita";
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("data1", OracleType.DateTime);
cmd.Parameters.Add("data2", OracleType.DateTime);
cmd.Parameters.Add("tipo", OracleType.Char);
// definiamo la variabile che conterrà il risultato della funzione
OracleParameter p = cmd.Parameters.Add("num", OracleType.Int16);
p.Direction = ParameterDirection.ReturnValue;
// impostiamo i parametri di ingresso alla funzione
cmd.Parameters[0].Value = d1;
cmd.Parameters[1].Value = d2;
cmd.Parameters[2].Value = tipo;
// eseguiamo la funzione
cmd.ExecuteNonQuery();
// prendiamo il valore restituito e lo mettiamo nella variabile i
i = int.Parse(p.Value.ToString());

Saluti
Gaetano Stella

crondinini Profilo | Newbie

System.Exception: Per utilizzare System.Data.OracleClient è necessario il software client per Oracle versione 8.1.7 o successiva.
Si risolve copiando il file MSVCR71.DLL dentro a Windows/System32
L'ho scoperto da qui
http://macinsoft.blogspot.com/2008/06/missing.html
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