IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[2.0] Null Reference Exception


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut [2.0] Null Reference Exception
    Salut,

    Je développe un service Windows actuellement, mais je poste tout de même ici, je pense que la logique est plus ou moins la même pour ce bug.
    Pour accéder à la base de données je m'inspire du cours "Travailler avec un DataSet".
    J'obtiens une null reference exception sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oCommand.CommandText = sSql
    Erreur banale pour vous peut-être mais pas pour moi. Dans le constructeur de la classe, je n'ai que InitializeComponent(). Le coup du InitializeCompoment(), si ça vient de là, est peut-être plus subtile que d'habitude.
    La méthode dans laquelle l'erreur se passe est appelée par un timer cf. une autre discussion à problème.
    Voici donc un bout de code, d'après celui, pourriez-vous me dire ce qui cloche?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Class ServicePlanification
    	Private oConn As New SqlConnection("une chaîne de connexion")
    	Private oCommand As SqlCommand
    	Private oCommandBuilder As SqlCommandBuilder
    	Private oDA As SqlDataAdapter
    	Private oDS As New DataSet()	'-- Attention au New
    	Private oDT As DataTable
    	Private oDV As DataView
    	Private oDR As DataRow
    	Private oDRCollection As DataRowCollection
    	Private sSql As String
     
    	Public Sub New()
    		'-- Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
    	End Sub
     
    	Public Sub selectionnerTache(ByVal stateInfo As Object)
    		Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
    		Dim flag As Boolean = False
    		Dim ATTENTE As DataTable
    		Dim EXECUTION As DataTable
     
    		sSql = "select ID_INTERVALLE from TYPE_INTERVALLE"
    		oCommand.CommandText = sSql
    		oCommand.Connection = oConn
    Merci par avance.

  2. #2
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    J'initialise dans le constructeur et j'ai mal lu le cours...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Par défaut
    A aucun moment tu n'instancies l'objet oCommand,

    Peut être que tu dois faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private oCommand As New SqlCommand
    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private oCommand As SqlCommand

  4. #4
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    En effet, j'ai pas bien lu le cours. J'aimerais qu'on m'explique pourquoi ces différents essais ne fonctionnent pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class ServicePlanification
    	Private oCommand As SqlCommand = new SqlCommand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class ServicePlanification
    	Private oCommand As New SqlCommand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub New()
    	oCommand = New SqlCommand
    	InitializeComponent()
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub New()
    	InitializeComponent()
    	oCommand = New SqlCommand  '-- je suis censé initialiser ici d'après le concepteur
    End Sub
    Je suis bien obligé de l'instancier dans la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub selectionnerTache(ByVal stateInfo As Object)
    	Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
    	sSql = "select ID_INTERVALLE from TYPE_INTERVALLE"
    	oCommand = New SqlCommand(sSql)

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub New()
    	InitializeComponent()
    	oCommand = New SqlCommand  '-- je suis censé initialiser ici d'après le concepteur
    End Sub
    ca, ca doit marcher
    m'enfin sinon tu mets un point d'arret là ou l'erreur se trouve et grace à la pile d'appel tu verras d'où tu arrives
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Décidément, il y a des chose que je ne comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Class ServicePlanification
    	Private oConn As SqlConnection = New SqlConnection("une chaîne de connexion quelconque")
    	Private oCommand As SqlCommand
    	Private sSql As String
     
    	Public Sub New()
    		InitializeComponent()
    	End Sub
     
    	Public Sub selectionnerTache(ByVal stateInfo As Object)
    		Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
    		sSql = "select * from MATABLE"
    		'oConn = New SqlConnection("une chaîne de connexion quelconque")
    		oCommand = New SqlCommand(sSql, oConn)
    		oConn.Open()
    		'...
    Ce code plante à oConn.Open() avec une null reference exception. Pourtant si je déplace l'instanciation dans la méthode, ça fonctionne!

    Je reste novice, auriez-vous une explication?

Discussions similaires

  1. Null Reference Exception
    Par saxophtrion dans le forum VB.NET
    Réponses: 8
    Dernier message: 16/05/2012, 15h55
  2. Une Null Reference Exception
    Par Vivien57 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/05/2011, 17h29
  3. NuLL Reference Exception
    Par khawlita dans le forum Accès aux données
    Réponses: 11
    Dernier message: 18/04/2009, 16h31
  4. Null reference exception
    Par xavpiaf dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/05/2008, 09h37
  5. Null Reference Exception
    Par mischa dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/06/2007, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo