Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Errore 91: riferimento a un oggetto non impostato su un'istanza di ogg...
giovedì 15 gennaio 2009 - 22.59
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ans66
Profilo
| Junior Member
62
messaggi | Data Invio:
gio 15 gen 2009 - 22:59
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
1.527
messaggi | Data Invio:
ven 16 gen 2009 - 12:34
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
62
messaggi | Data Invio:
ven 16 gen 2009 - 17:34
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
1.527
messaggi | Data Invio:
ven 16 gen 2009 - 18:08
>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
62
messaggi | Data Invio:
ven 16 gen 2009 - 18:49
916_Codice.zip
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
1.527
messaggi | Data Invio:
ven 16 gen 2009 - 19:18
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
62
messaggi | Data Invio:
ven 16 gen 2009 - 20:21
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
1.527
messaggi | Data Invio:
ven 16 gen 2009 - 20:24
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
62
messaggi | Data Invio:
ven 16 gen 2009 - 20:37
hai messo le classi e provadll tutte nello stesso form per avere il debug, vero?
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
ven 16 gen 2009 - 21:04
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
62
messaggi | Data Invio:
ven 16 gen 2009 - 21:45
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
Torna su
Stanze Forum
Elenco Threads
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 !