Errore 91: riferimento a un oggetto non impostato su un'istanza di ogg...

giovedì 15 gennaio 2009 - 22.59

ans66 Profilo | Junior Member

Ho creato una dll con mie classi. Con una di queste gestisco SQl Oledb. Nei due casi sotto indicati non riesco a bloccare l'errore nel titolo che mi provoca un'uscita dal form inaspettata.

Case Is = EnumQuery.SelectWithParameter ' Select con Parametri
LanciaParametri(prm, StrutDaPassare)
OleDbAdpt = New OleDb.OleDbDataAdapter(Oledbcom)
OleDbAdpt.SelectCommand.CommandText = Quer
OleDbAdpt.SelectCommand.Connection = OleDbCon
OleDbCon.Open()
RispOledb = OleDbAdpt.SelectCommand.ExecuteNonQuery()
OleDbAdpt.Fill(ds)

If RispOledb = 1 Then dt = ds.Tables(0)

Beep()
'If MsAfineAz <> String.Empty Then _
'MessageBox.Show(MsAfineAz, MsAfineAz, MessageBoxButtons.OK, MessageBoxIcon.Information)
If RispOledb = 1 Then _
MessageBox.Show(MsAfineAz, MsAfineAz, MessageBoxButtons.OK, MessageBoxIcon.Information)

Return dt




Case Is = EnumQuery.SelectWithoutParameter ' Select senza Parametri
OleDbCon.ConnectionString = ConnDB
Oledbcom.CommandText = Quer

Oledbcom.Connection = OleDbCon
OleDbAdpt.SelectCommand = Oledbcom
OleDbCon.Open()

OleDbAdpt.Fill(ds)
If RispOledb = 1 Then dt = ds.Tables(0)
If Not DBNull.Value.Equals(dt.Rows(0).Item(0)) Then
IdTab = dt.Rows(0).Item(0)
Else
MessageBox.Show("Nessun Record!", "Nessun Record!")
End If

Jeremy Profilo | Guru

A parte il fatto che è sbagliato il concetto di WithParameter e WithoutParameter.
Il tuo errore stà nel fatto che tenti di usare un oggetto di cui non è hai creato una nuova istanza....probabilmente, da quello che vedo, il command.

Ciao

ans66 Profilo | Junior Member

Ciao Jeremy,

Grazie per la risposta. Ho scelto nel mio Enum di prevedere un Select with Parameter e wihthout perche` passo i parametri di una sql con "Where campo=Valore (Valore Parametro + tipo sono passati in due arraylist). Nel caso di Select without Parameter passo nothing perche` non ho bisogno dei parametri. Ho provato ad inserire Oledbcom=New Oledb.OledbCommand ma niente. Dicendo "creare un istanza" intendi dire reinizializzare OledbCom: e` corretto?

Jeremy Profilo | Guru

>Dicendo "creare un istanza" intendi dire reinizializzare OledbCom: e`
>corretto?

Si è corretto....la mia affermazione riguardo il concetto sbagliato ...blablabla...era riferito al fatto che , nel tuo codice, non vedevo l'uso dell'oggetto parameter....ma, ora, mi sono accorto che hai la funzione LanciaParametri dove, evidentemente, fai quello che non vedevo....

Comunque, tornando all'errore, dovresti indicare su quale riga di codice ti si verifica l'eccezione.....solo in questo modo, possiamo capire dov'è il problema.

Il mio sospetto, comunque è che l'errore sia nella funzione LanciaParametri.

Ciao...

ans66 Profilo | Junior Member

Grazie per la risposta. Hai ragione in una normale applicazione Windows Form il debug puo` essere impostato per arrestarsi dove avviene l'errore ma in questo caso ho elaborato un codice assemblato dll che sto testando da un Form tabella con pulsanti (es.: Inserisci, Elimina...) dal quale lancio le varie funzioni contenute nell'assemblato.

Ho creato una funzione per la gestione degli errori:

Public Sub GestioneErrori(ByVal messErr As String, ByVal ErrNr As Integer)
MessageBox.Show(messErr, "Errore nr.:" & ErrNr)
End Sub

e una routine che mi scrive su un file log le routine chiamanti:

Private Sub ScriviSuFile(ByVal Frm As String, ByVal Sb As String)
Try

Dim FileLog As String = Microsoft.VisualBasic.FileIO.SpecialDirectories.MyDocuments & _
"\FileLog.txt"
Dim FileWriter As New StreamWriter(FileLog, True)
FileWriter.WriteLine("Chiamato da Form: " & Frm & Space(2) & "e Sub/Function: " & Sb)
FileWriter.Close()
Exit Sub

Catch ex As Exception
GestioneErrori(ex.Message, Err.Number)
Exit Try
End Try
End Sub

Dal Form passo il valore: System.Reflection.MethodBase.GetCurrentMethod.Name (nome routine chiamante) e ottengo un file con log tipo:

Chiamato da Form: ProvaClasse e Sub/Function: Button2_Click
Chiamato da Form: ProvaClasse e Sub/Function: Button2_Click
Chiamato da Form: ProvaClasse e Sub/Function: Button7_Click
Chiamato da Form: ProvaClasse e Sub/Function: Button7_Click

Il primo errore 9: Nessuna riga alla posizione 0 e` gestito correttamente dalla funzione di GestioneErrori ed e` previsto perche` non ci sono record nel dataset (e questo e` il caso) ma il secondo errore, subito dopo, (nel titolo) e` imprevisto e genera la fuoriscita inaspettata e non gestita dal form chiamante.

Spero di essere stato chiaro ma comunque allego il codice dll e form chiamante per maggiore chiarezza.

Jeremy Profilo | Guru

Guarda che il problema, probabilmente e qui:
If Not DBNull.Value.Equals(dt.Rows(0).Item(1))= etc.....
Se il Dt è vuoto, non esiste nessun oggetto Row nella collection Rows.....quindi Errore di riferimento a un oggetto non impostato su un'istanza di oggetto(quindi non esiste l'oggetto).

Prova a inserire quel codice...in una condizione dove prima valuti se l'oggetto esiste o meno.
Quindi

If dt.rows is nothing orelse if dt.rows.count =0 then
'...............
end if

ciao.

ans66 Profilo | Junior Member

Anche cosi errore....non riesco a capire quando l'errore scaturisce

Oledbcom = New OleDb.OleDbCommand
OleDbAdpt = New OleDb.OleDbDataAdapter

OleDbCon.ConnectionString = ConnDB
Oledbcom.CommandText = Quer

Oledbcom.Connection = OleDbCon
OleDbAdpt.SelectCommand = Oledbcom
OleDbCon.Open()

OleDbAdpt.Fill(ds)
If RispOledb = 1 Then dt = ds.Tables(0)
If dt.Rows Is Nothing OrElse dt.Rows.Count = 0 Then
MessageBox.Show("Nessun Record!", "Nessun Record!")
Else
IdTab = dt.Rows(0).Item(0)
Return dt
End If

Jeremy Profilo | Guru

Senti...ma perchè dici che non puoi eseguire il debug....io l'ho fatto con il codice che mi hai mandato tu???

ans66 Profilo | Junior Member

hai messo le classi e provadll tutte nello stesso form per avere il debug, vero?

Jeremy Profilo | Guru

Parti dal concetto che non puoi scrivere un'applicazione per il quale non puoi eseguire il Debug....è da suicidio.
Posta il motivo per cui non riesci a farne il Debug che vediamo di trovare una soluzione.

Indovinare quale oggetto non è stato istanziato, per avere quell'errore, è da maghi, senza il debug...dovresti diventare un compilatore
o rileggerti tutta l'applicazione

Ciao

ans66 Profilo | Junior Member

spero non mi banniate dal forum per la brutta figura ma ero convinto che trattandosi di una dll (codice precompilato) dovessi testare il comportamento della dll importata dall'esterno nell'apllicazione windows form...quindi era ancora peggio di come pensavi...sara` che e` venerdi sera
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