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