Ошибка преобразования при преобразовании значения varchar 'Blue color' в тип данных int - PullRequest
4 голосов
/ 02 июля 2010

2

Привет!Я пытаюсь создать хранимую процедуру, которая возвращает возвращаемое значение varchar, и это значение мне нужно отобразить в текстовом поле.

Это код для хранимой процедуры:

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 

Это кодв vb.net, где мне нужно отобразить возвращаемое значение из процедуры в текстовом поле:

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

Когда я пытаюсь выполнить этот код, я получаю это исключение:

"Преобразование не удалось при преобразованиизначение varchar 'Blue color' для типа данных int. "

Что я делаю не так?Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

RETURN принимает только целочисленный аргумент, поэтому return @Name вызывает его

Используйте это вместо того, чтобы вернуть набор записей (с соответствующим JOIN тоже)

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

Хотя, это можеттоже нужно писать так, потому что @id_doc = doc.IDN = Items.ID:

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

Если вы хотите использовать параметр OUTPUT, а не набор записей, просто удалите оператор RETURN и оставьте присвоение @ 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 голосов
/ 02 июля 2010

Я думаю, что вы передаете "Синий цвет" в качестве значения параметра в id_doc.
И вызов хранимой процедуры может быть неудачным, потому что он принимает тип int в качестве 1-го входного параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...