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

VB.NET Discussion :

Problème de renvoie d'infos dans une procédure


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 189
    Points : 87
    Points
    87
    Par défaut Problème de renvoie d'infos dans une procédure
    Voila j'utilise une procédure qui me permet de charger un sqldatareader pour pouvoir le parcourir et par la suite mettre les infos dont j'ai besoin dans des cellules spécifiques d'un datagridview.
    Cependant ma procédure qui s'occupe de charger les données dans mon datareader se trouve dans une classe qui s'occupe de tout ce qui est liaison avec la base de donnée et j'ai besoin de récupérer l'objetdatareader dans le code de ma form principal pour pouvoir le parcourir et organiser mes données dans mon datagridview. Pour cela j'ai utilisé le byval, mais les données ne transitent pas, quand je fais la vérification des données du coté de ma classe de départ j'en ai bien, mais lorsque je parcours mon objetdatareader dans ma form j'ai aucune information.

    Voici le code

    Fonction qui charge le datareader du coté de ma classe de conenction a la BD
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
      Public Function reader(ByVal req As String, ByVal objdatareader As SqlDataReader) As Boolean
            Try
                'on instancie la connexion
                objetconnection = New SqlConnection
     
                'on donne les valeurs à la connexion
                objetconnection.ConnectionString = strConn
     
                'on instancie un objet Commande
                ObjetCommand = New SqlCommand(req)
     
                'on ouvre la connexion
                objetconnection.Open()
     
                'initialiser l'objet Command
                ObjetCommand.Connection() = objetconnection
     
                'on instancie un objet datareader
                objdatareader = ObjetCommand.ExecuteReader
     
     
                If objdatareader.HasRows Then
                    Return True
                    '' tant que le DataReader a une ligne d'enregistrements
                    'File.Delete("\table.txt")  'on supprime le fichier si il existe déja
                    'Dim Flux As New StreamWriter(Application.StartupPath & "\table.txt", False) 'crée un fichier nommé test.txt
                    'While ObjetDatareader.Read
                    '    Flux.Write(ObjetDatareader.GetValue(1)) 'écrit les données dans le fichier
                    '    Flux.Write(Environment.NewLine)
                    'End While
                    'Flux.Close() 'ferme le fichier ===> important !!
                Else
                    'si il n'y a pas de ligne on informe
                    MessageBox.Show("Il n'y a pas de donnée", "Infos", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Return False
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                'If Not (ObjetDatareader Is Nothing) Then ObjetDatareader.Close()
                If Not (objetconnection Is Nothing) Then objetconnection.Close()
            End Try
        End Function
    et çà c'est le code d'appel de la fonction qui devrait me renvoyer un objetdatareader chargé de donné
    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
     
            Dim objdatareader As SqlDataReader
     
            If BD.reader(strSql, objdatareader) Then
     
                '' tant que le DataReader a une ligne d'enregistrements
     
                While objdatareader.Read
     
                    With DATAGRIDHeureInt
     
                        .Rows(6).Cells(1).Value = objdatareader.GetValue(2)
     
                    End With
     
                End While
     
     
            End If
    Quand je veux lire les données j'obtiens ces messages là :

    L'exception NULLReferenceException n'a pas été géré et La référence d'objet n'est pas définie à une instance d'un objet.

    Comment puis-je remedier à cela ??

    d'avance merci

    @++
    dubidon

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 189
    Points : 87
    Points
    87
    Par défaut
    personne ne peut m'aider ??

    @++
    dubidon

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    A la volée je dirai que byval ou byref pour un objet ça change pas grand chose --> ça sera toujours byref de toute façon !

    Par contre, tel que tu fais, l'objet que tu passes n'est pas instancié.

    T'as essayé :
    Dim objdatareader As NEW SqlDataReader

    Cdt.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    Voici coment j'utilise une fonction d'une classe qui gère les commandes aux bases de données
    Dans mon code :
    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
     Private Sub S_ChercherAnFact()
        Dim ClBdr As New LibJean.ClBdr
        Dim DTARDR As SqlClient.SqlDataReader
        Dim SCmd As String
        SCmd = LaCommandeSQL
        Try
          DTARDR = ClBdr.F_ExecSQLRDR(SCmd, SQLCON)
          If DTARDR Is Nothing Then
          Else
            If DTARDR.HasRows Then
              DTARDR.Read()
    'lecture du datareader
            End If
            DTARDR.Close()
          End If
        Catch ex As Exception
          MsgBox("erreur xxxxxx")
        End Try
      End Sub
    la fonction dans la classe
    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
      Public Function F_ExecSQLRDR(ByVal SCmd As String, ByRef SQLCON As SqlClient.SqlConnection, Optional ByVal TimeOut As Integer = 0) As SqlClient.SqlDataReader
        Dim SQLCMD As New SqlClient.SqlCommand
        Try
    'S_OpenSQLCON est une procédure de la classe qui ouvre une connection, mais tu peux ouvrir directement(SQLCON.open)
          S_OpenSQLCON(SQLCON)
          SQLCMD.Connection = SQLCON
          SQLCMD.CommandText = SCmd
          SQLCMD.CommandType = CommandType.Text
          SQLCMD.CommandTimeout = TimeOut
          Return SQLCMD.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
        Catch ex As Exception
          Throw New Exception("reader non chargé", ex)
          Return Nothing
        End Try
      End Function
    J'espère que cela peut d'aider.
    Bon boulot Jean

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/10/2008, 16h29
  2. Problème de longueur de requête dans une procédure stockée
    Par doudou_rennes dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/03/2007, 16h39
  3. Réponses: 8
    Dernier message: 03/11/2006, 15h55
  4. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

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