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 :

récupérer le résultat d'une procédure stockée [Débutant]


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut récupérer le résultat d'une procédure stockée
    Bonjour,

    J'ai créé une procédure stockée prenant des paramètres en entrée et deux paramètres de sortie.

    Quand je l'exécute sous sql developper j'ai les résultats suivants :

    @pAllDone : 0
    @pDetail : 73.r

    Quand j'appelle cette procédure via mon application vbnet j'obtiens les résultats suivants :

    @pAllDone : 0
    @pDetail : 7

    Je ne comprends pas pourquoi @pDetail n'a qu'un seul caractère quand j'appelle la procédure depuis mon programme vbnet alors que depuis sql developper tout semble correct.

    En tête de la procédure stockée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE [dbo].[CheckAllReworksDone]
    	@pSN as VARCHAR (13) = '',
    	@pDevice as VARCHAR(25) = '',
    	@pLogCheck as bit = 0,
    	@pAllDone AS bit = 0 output,
    	@pDetail as varchar(100) = '' output
    AS
    BEGIN
    ...
    END
    Et le code qui l'appelle :
    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
    45
    46
    47
    48
    49
    50
     
    Try
     
      'Procédure stockée à utiliser
      Dim _Cnt As SqlConnection 'Database connection to use
      _Cnt = New SqlConnection(My.Settings.QUALITEConnectionString)
     
      Dim cmd As New SqlCommand("CheckAllReworksDone", _Cnt)
      cmd.CommandType = Data.CommandType.StoredProcedure
     
      'Paramètres de la procédures
      Dim p1 As New SqlParameter("@pSN", txtSerialNumber.Text)
      p1.Direction = Data.ParameterDirection.Input
      cmd.Parameters.Add(p1)
     
      Dim p2 As New SqlParameter("@pDevice", "")
      p2.Direction = Data.ParameterDirection.Input
      cmd.Parameters.Add(p2)
     
      Dim p3 As New SqlParameter("@pLogCheck", False)
      p3.Direction = Data.ParameterDirection.Input
      cmd.Parameters.Add(p3)
     
      Dim p4 As New SqlParameter("@pAllDone", False)
      p4.Direction = Data.ParameterDirection.Output
      cmd.Parameters.Add(p4)
     
      Dim p5 As New SqlParameter("@pDetail", "")
      p5.Direction = Data.ParameterDirection.Output
      cmd.Parameters.Add(p5)
     
      _Cnt.Open()
      cmd.ExecuteNonQuery()
      _Cnt.Close()
     
      If cmd.Parameters("@pAllDone").Value Then
          imgResult.Image = My.Resources.button_ok
          imgResult.Visible = True
          lblDetails.Text = cmd.Parameters("@pDetail").Value + My.Application.oResManager.GetString("Defect") + IIf(CInt(p5.Value) < 2, "", "s")
      Else
          imgResult.Image = My.Resources.button_cancel
          imgResult.Visible = True
          lblDetails.Text = cmd.Parameters("@pDetail").Value
      End If
      lblDetails.Visible = True
    Catch ex As Exception
          MsgBox(ex.Message, MsgBoxStyle.Critical, My.Application.oResManager.GetString("ApplicationName"))
    Finally
      Cursor = Cursors.Default
    End Try
    Quelqu'un aurait-il une solution ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui

    pour les parameters output, il faut spécifier la taille (pour les int elle est implicite, mais pour les varchar, nvarchar et surement decimal il faut le préciser)
    (je pense qu'en input la taille est définie selon la taille du value fournit)

    =>

    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2008
    Messages : 42
    Points : 73
    Points
    73
    Par défaut
    Tu devrais peut être aussi préciser le type que tu attend en retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dim p1 as new SqlParameter("NomduParam",type)

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    En effet en passant par un autre constructeur, cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim p1 as new SqlParameter("@pDetail",sqldbtype.varchar,100)
    Cependant, est-on obligé d'avoir une taille "finie" pour les varchar ? au départ, dans ma procédure stockée, j'avais mis varchar(max) pour @pDetail.

    Donc du coup je ne vois pas trop comment traduire ça une fois en vb.net.

    En tout cas merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    google ca existe, msdn aussi (l'un ramenant souvent sur l'autre)
    à priori il faut mettre -1 dans size pour max
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2008, 13h18
  2. [DELPHI 6.0][ADO] Récupérer le résultat d'une procédure stockée
    Par Invité dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/05/2008, 10h24
  3. Comment récupérer le résultat d'une procédure stockée (OUT parameter) ?
    Par java2008 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 08/04/2008, 13h00
  4. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 22h08
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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