DataSet NullReference

giovedì 18 marzo 2010 - 15.46

Explorer83 Profilo | Newbie

Ciao a tutti, sono nuovo del forum e mi sono appena registrato.
Per esigenze lavorative mi trovo a dover gestire un portale asp.net in vb.net.
Inutile dirvi che sono completamente disorientato e non so neanche da dove cominciare: non ho mai programmato in vb nè avuto a che fare col .net
framework!
Fiducioso nella vostra bontà vi sottopongo la questione.

Sul portale ho una combo che non ne vuole sapere di riempirsi coi valori dovuti. Sono andato a spulciare il codice e com'era ovvio la combo dovrebbe
valorizzarsi con dei dati presi da un db oracle. Il prelievo dei dati sembra andare a buon fine (vi è un controllo fatto dalla funzione "IsDBNull()" che
sembra rivelare che il DataSet chiamato "ds" ha i dati, ma poco dopo si fa riferimento ad una sua table per contare i record con il codice
"ds.Tables(0).Rows.Count" che fa scattare una "NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto".

Sicuramente la questione è banale ma io sono un totale neofita quindi vi prego di essere chiari e anzi colgo l'occasione per chiedere consiglio su un
buon manuale da cui attingere una prima buona infarinatura su .net framework, asp.net e vb.net.

Un saluto

Gho5t Profilo | Junior Member

prova ad entrare in debug con un breakpoint prima della riga di codice incriminata e a vedere quanto vale l'istruzione:
ds.Tables.Count()

sembra quasi che non ci siano tabelle dentro il Dataset e quindi va in errore quando cerchi di prelevare la prima tabella con "ds.Tables(0)"...

Explorer83 Profilo | Newbie

Grazie per il valido suggerimento ma la riga che ho aggiunto:

"Response.Write(ds.Tables.Count())"

mi genera essa stessa errore, lo stesso, sempre NullReferenceException!
Sembra che il DataSet stesso sia Null....ma la cosa è impossibile visto che quella riga si trova all'interno di un 'if' di questo tipo:

"if Not IsDbNull(ds) Then..."

cioè viene verificato proprio che il dataset non sia null!!!

Qualche altro suggerimento?

Gho5t Profilo | Junior Member

prova a cambiare da "if Not IsDbNull(ds) Then" a
if Not ds Is Null Then
mi pare che la funzione IsDbNull() controlla solamente se un determinato campo è null e non tutto un oggetto di tipo DataSet...

Explorer83 Profilo | Newbie

L'istruzione sembra sbagliata, mi dice che la costante Null non è più supportata

Gho5t Profilo | Junior Member

scusa ma lavoro molto con il C# ed ho confuso le istruzioni..
If Not ds Is Nothing Then
questa dovrebbe essere quella esatta... xd

Explorer83 Profilo | Newbie

Grande....il dataset risulta in effetti nullo...evidentemente la funzione che deve valorizzarlo non fa il suo dovere!

Molte grazie!...ti faccio sapere se incontro qualche altro problema...mi sei stato di grande aiuto :)

Explorer83 Profilo | Newbie

Il problema persiste! :(
Pare che non riesca ad effettuare la connessione all'interno di una funzione che posto per intero:

--------------------------------------------------
Public Function Recuperadataset(ByVal strProcedura As String, ByVal strConn2 As String) As DataSet

cn = New OleDbConnection(strConn2)

Dim ds As New DataSet

Dim da As New OleDbDataAdapter(strProcedura, cn)
da.SelectCommand.CommandType = CommandType.Text

Try
da.Fill(ds)
Return ds
Catch ex As OleDbException
Return Nothing
Finally
cn.Close()
End Try
End Function
-----------------------------------------------------------

Al momento dell'esecuzione la variabile strConn2 è valorizzata con la stringa:
"Provider='MSDAORA.1';User ID=criticita;Password=<password>;Data Source='ORSO.WORLD'"
chiaramente al posto del tag tra parentesi angolari vi è il vero valore.

Ho provato ad inserire, dopo 'cn = New OleDbConnection(strConn2)', l'istruzione 'cn.Open()' ma il risultato è lo stesso, non riesce a connettersi!

Qualche idea?

Gho5t Profilo | Junior Member

a questo punto se l'username e la password sono esatti (controllali una volta di più che male non fa... xd), così come il DataSource (stesso discorso di controllarli un'ulteriore volta come per l'username e la password) allora il problema è nella stringa di connessione che è scritta male...

tu utilizzi Oracle come DBMS giusto?
prova a guadare se con la stringa di questo link funziona:
http://www.connectionstrings.com/oracle#p15

prova prima a vedere se la connessione riesce oppure no con un try a parte (così se fai un debug capisci anche se è effettivamente li il problema)
Public Function Recuperadataset(ByVal strProcedura As String, ByVal strConn2 As String) As DataSet cn = New OleDbConnection(strConn2) Try cn.Open() Catch ex As OleDbException MessageBox.Show(ex.Message) Finally cn.Close() End Try Dim ds As New DataSet Dim da As New OleDbDataAdapter(strProcedura, cn) da.SelectCommand.CommandType = CommandType.Text Try da.Fill(ds) Return ds Catch ex As OleDbException Return Nothing Finally cn.Close() End Try End Function

Explorer83 Profilo | Newbie

Non mi riconosce la funzione MessageBox. E' un file .vb in VB.NET come devo fare per farmi dare un messaggio?

Gho5t Profilo | Junior Member

il MessageBox.Show che ho messo è un'istruzione per far visualizzare il messaggio di ex.Message... ovviamente funziona solamente per le windows application...

ce l'ho messo così per farti capire che dovresti printarti il messaggio di errore... visto che tu utilizzi l'asp.net dovresti fare o un Response.Write(ex.Message) oppure utilizzare una TextBox dove andrai ad inserirci il messaggio di errore...

Explorer83 Profilo | Newbie

Il messaggio dell'eccezione è il seguente:
"Impossibile trovare il client e i componenti di rete Oracle. Tali componenti vengono forniti da Oracle Corporation e fanno parte dell'installazione del software client Oracle versione 7.3.3 o successive.

Se non si installano tali componenti, non sarà possibile utilizzare questo provider."


Ho provato a creare la variabile d'ambiente ORACLE_HOME valorizzandola col percorso della mia Home directory oracle ma non è cambiato niente! :(

Altre idee?

Gho5t Profilo | Junior Member

ti dice che non trova i componenti per connettersi ad oracle... hai scaricato ed installato nel tuo pc i driver per connetterti ad oracle?
perché sembra quasi che questi driver non esistono...

Explorer83 Profilo | Newbie

Nel mio pc ho installato il client della versione 10g di oracle! Devo installare qualcos'altro?

Gho5t Profilo | Junior Member

non ho mai utilizzato il DBMS di Oracle, quindi vado abbastanza a tentoni... l'errore è sicuramente dovuto alla connessione al DBMS... ora le possibili cause sono 2:
1) è sbagliata, in qualche modo, la stringa di connessione (se hai modificato la stringa di connessione in base al link che ti ho dato, non dovrebbe essere questo il problema)
2) ti manca il connector di Oracle per il .NET (librerie per connetterti da .NET a Oracle)

In questo link ti permette di scaricare l'Oracle Data Access Components (ODAC) per windows che dovrebbe essere il connector... forse è questo che ti manca?
http://www.oracle.com/technology/tech/dotnet/index.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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5