2010-07-02 14 views
4

Hi! J'essaye de créer la procédure stockée qui est allée renvoyer la valeur de varchar, et cette valeur que j'ai besoin d'afficher dans la zone de texte.La conversion a échoué lors de la conversion de la valeur varchar 'Couleur bleue' en type de données int

C'est le code de procédure stockée:

Create PROCEDURE Status @id_doc int, @Name varchar(50) OUTPUT 
AS 
select @Name =items.name  
from Doc,Items where @id_doc=IDN and doc.IDN=Items.ID 
return @Name 

Ceci est le code vb.net où je dois afficher la valeur retournée de la procédure en zone de texte:

Public Sub Current() 
    Dim dtc As New Data.DataTable 
    Dim dr As SqlClient.SqlDataReader 
    Dim da As New SqlClient.SqlDataAdapter 
    Dim cmd As New SqlClient.SqlCommand 
    Dim id_doc As Integer 
    Dim dset As New DataSet 
    Dim recordset As DataRow 
    Dim Name As String 

    Try 
     id_doc = idDocExplorer 
     cmd.Connection = pubCon 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.CommandText = "Status" 
     cmd.Parameters.Add("@id_doc", id_doc) 
     cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50) 
     cmd.Parameters("@Name ").Direction = ParameterDirection.Output 
     cmd.ExecuteScalar() 

     Name = cmd.Parameters("@Name").Value 
     TextBox1.text=Name 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
     dtc = Nothing 
     dr = Nothing 
     da = Nothing 
    End Try 
End Sub 

Lorsque je tente de exécutez ce code Je reçois ce message en exception:

"La conversion a échoué lors de la conversion de la valeur varchar 'Couleur bleue' en type de données int."

Qu'est-ce que je fais mal? Merci!

+0

est ce C#? Intéressant. –

+0

@Serkan: C'est vb.net (et il est étiqueté ainsi). – shahkalpesh

+0

a été marqué comme un C# aussi, de toute façon c'est maintenant corrigé. –

Répondre

4

RETOUR prend un argument entier uniquement return @Name est à l'origine

Utilisez ce lieu pour retourner un jeu d'enregistrements (avec un bon REJOIGNEZ trop)

select 
    items.name  
from 
    Doc 
    JOIN 
    Items ON doc.IDN = Items.ID 
where 
    @id_doc = IDN 

Bien, il peut être écrit comme ça aussi parce @id_doc = doc.IDN = Items.ID:

select 
    items.name  
from 
    Items 
where 
    Items.ID = @id_doc 

Si vous souhaitez utiliser un paramètre de SORTIE plutôt que d'un jeu d'enregistrements, puis retirez simplement le RETOUR STATEM ent et laisser l'Assigner à @name

ALTER PROCEDURE Status @id_doc int, @Name varchar(50) OUTPUT 
AS 
select @Name = items.name from Items where Items.ID = @id_doc 
GO 
+0

Merci beaucoup! Maintenant ça marche bien! – user238271

-1

Je pense que vous passez « Couleur bleu » comme une valeur de paramètre sous id_doc.
Et l'appel de procédure stockée peut échouer car il accepte un type int comme 1er paramètre d'entrée

+0

non, OP essaie de retourner "couleur bleue" via l'instruction de retour – gbn

+0

@gbn: Que se passe-t-il si vous passez une valeur varchar pour un paramètre int? – shahkalpesh

+0

La même erreur, mais ce n'est pas la cause ** ici ** – gbn

Questions connexes