Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [VB.NET] Object reference not set to an instance of an object.

    Salve, capita di rado che il risultato di una query dia il seguente messaggio di errore: "Object reference not set to an instance of an object."

    Di conseguenza il sito scoppia.
    Volevo capire se esisteva una soluzione per evitare la pagina di errore, ad esempio con un re-indirizzamento alla default, ecc.

    Di seguito il codice che utilizzo normalmente:
    codice:
        If Datatable.Rows.Count > 0 Then
        end if
    Dopo aver aperto il datatable ed eseguito la query, interrogo lo stesso chiedendo se ha trovato righe. Lì va in errore.
    Ultima modifica di MItaly; 31-08-2016 a 22:55

  2. #2
    Di che linguaggio stiamo parlando? Puoi fornire un po' più di contesto di codice? (l'eccezione in sé significa semplicemente che DataTable è impostato a Nothing, come questo possa accadere dipende dal codice che lo inizializza)
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Il linguaggio è il VB net.

    Di seguito il codice

    codice:
     Dim DTNews As DataTable = ApriTab("Sintassi query")
          If DTNews.Rows.Count > 0 Then
    end if
    "Apritab" è una funzione. Di seguito il codice
    codice:
    Public Function ApriTab(ByVal cQuery As String, Optional ByVal SingleValue As Boolean = False) As Object
        Dim valRet As Object
        Try
          Dim cnClosed As Boolean = False
          If cn.State = ConnectionState.Closed Then cn.Open()
          Dim da As New MySqlDataAdapter(cQuery, cn)
          Dim ds As New DataTable
          da.Fill(ds)
          da.Dispose()
          If SingleValue And ds.Columns.Count = 1 Then 'singolo campo
            valRet = ""
            If ds.Rows.Count > 0 Then valRet = ds.Rows(0).Item(0)
          Else 'DATASET di dati
            If Not IsNothing(ds) Then valRet = ds Else Throw New DivideByZeroException("dataset nullo in Apritab")
          End If
        Catch ex As MySqlException
       
        Catch ex As Exception
          Threading.Thread.Sleep(200)
       
        End Try
        Return valRet
      End Function
    Ultima modifica di MItaly; 31-08-2016 a 22:58 Motivo: Tag CODE, sezione

  4. #4
    Be' ci sono diversi modi in cui questa funzione può restituire Nothing, nello specifico in tutti i casi in cui viene sollevata un'eccezione tu la nascondi sotto il tappeto (aspettando 200 ms - eh?) e restituisci valRet lo stesso, che se non è stato valorizzato prima sarà a Nothing. Non mi sembra un gran modo di gestire gli errori...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    io riscriverei ApriTab dividendola in due diverse procedure.
    La prima es getDataTable che restituisce un DataTable
    La seconda es. getValue che restituisce in un object la prima colonna della prima riga della query.

    Oltre tutto (mettendo la direttiva Option Strict On) non è possibile mettere una variabile object in una variabile DataTable

    per esempio, l'istruzione valRet = ds.Rows(0).Item(0) potrebbe benissimo restituire il valore System.DBNull.Value. Tu lo intercetti?
    Pietro

  6. #6
    No, penso sia questo il problema, mi limito a controllare che ".rows.count>0". Se quel valore è nullo mi fa scoppiare il sito. Mi daresti una mano?

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then

    Non credo che serva però, se non cambi il codice
    Pietro

  8. #8
    Condivido, non credo serva, mi servirebbe una mano a cambiare la funzione "ApriTab"

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ApriTab cosa deve restituire? un DataTable?
    Pietro

  10. #10
    esatto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.