Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 转换varchar值时转换失败';蓝色';到数据类型int_Sql_Sql Server_Vb.net_Tsql_Types - Fatal编程技术网

Sql 转换varchar值时转换失败';蓝色';到数据类型int

Sql 转换varchar值时转换失败';蓝色';到数据类型int,sql,sql-server,vb.net,tsql,types,Sql,Sql Server,Vb.net,Tsql,Types,二, 嗨!我正在尝试创建返回varchar值的存储过程,该值需要显示在textbox中 这是存储过程的代码: 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中的代码,我需要在文本框中显示过程返回的值:

二,

嗨!我正在尝试创建返回varchar值的存储过程,该值需要显示在textbox中

这是存储过程的代码:

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时,转换失败。”


我做错了什么?谢谢

RETURN只接受整数参数,因此
RETURN@Name
导致它

使用此选项返回一个记录集(也有一个正确的连接)

尽管如此,它也可以这样写,因为
@id\u doc=doc.IDN=Items.id

select
    items.name    
from
    Items
where
    Items.ID = @id_doc
如果您想使用输出参数而不是记录集,那么只需删除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
我认为您正在将“蓝色”作为参数值传递到
id\u doc


存储过程调用可能会失败,因为它接受
int
类型作为第一个输入参数

否,OP试图通过返回返回返回“蓝色”statement@gbn:如果为int参数指定varchar值,会发生什么情况?@gbn:看到
RETURN
语句是您的答案的原因吗?对我来说,我不知道用户可以为
id\u doc
传递什么。vb.net将
Dim id\u doc作为整数
,所以你不能将“蓝色”传递给SQL;它会更早地失败。但是错误消息是SQL错误,而不是.net错误,因此它必须在SQL代码中。我没有立即跳转返回,我已完成并分析了问题…@gbn:Hmmm。我跳转到错误消息并认为这是SQL错误。因此,.net代码中一定有错误(传递的是字符串值而不是int)。谢谢你的回复。这有助于我理解我应该详细分析事情&而不是急于回答:)@Serkan:它是vb.net(它被标记为so)。它也被标记为C#,反正它现在已经修复了。
ALTER PROCEDURE Status @id_doc int, @Name varchar(50) OUTPUT
AS
select @Name = items.name from Items where Items.ID = @id_doc
GO