我使用下面的代码通过执行存储过程将值插入数据库。
Dim connstring As String = "dsn=test"
Dim oConn As Odbc.OdbcConnection = New Odbc.OdbcConnection(connstring)
Dim com As New Odbc.OdbcCommand("{? = call sp_test1(?,?,?,?)}", oConn)
com.CommandType = CommandType.StoredProcedure
com.Parameters.AddWithValue("@Code", 2)
com.Parameters.AddWithValue("@Name", "2")
com.Parameters.AddWithValue("@Familly", "2")
com.Parameters.AddWithValue("@Pname", "2")
oConn.Open()
com.ExecuteNonQuery()
oConn.Close()
但是我收到了这个错误
ERROR [HY105] [Microsoft][ODBC SQL Server Driver]Invalid parameter type
这是我的存储过程
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create Procedure [dbo].[sp_test1]
@Code bigint,
@Name nvarchar(50),
@Familly nvarchar(50),
@Pname nvarchar(50),
As
Begin
Insert Into test1
([Code],[Name],[Familly],[Pname])
Values
(@Code,@Name,@Familly,@Pname)
Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY
Return @ReferenceID
End
有解决方案吗?
答案 0 :(得分:0)
乍一看,存储过程具有类型bigint
的第一个参数,而它以输入的形式给出了字符串值。
com.Parameters.AddWithValue("@Code", "2")
将上述内容更改为
com.Parameters.AddWithValue("@Code", 2)
这有用吗?
编辑:你可以改变这一行
Dim com As New Odbc.OdbcCommand("{? = call sp_test1(?,?,?,?)}", oConn)
到
Dim com As New Odbc.OdbcCommand("sp_test1", oConn)
答案 1 :(得分:0)
发生错误是因为您没有传递返回值参数,该参数在CommandText中指定,但在参数集合中缺失(命令文本中的第一个问号是返回值参数)。
因为参数必须按顺序传递,所以ODBC认为@Code是RETURN_VALUE,而@Name实际上是@Code,因此发生类型不匹配错误。
您必须添加以下代码
com.Parameters.Add("", OdbcType.Int).Direction = ParameterDirection.ReturnValue
com.Parameters.AddWithValue("@Code", 2)
com.Parameters.AddWithValue("@Name", "2")
com.Parameters.AddWithValue("@Familly", "2")
com.Parameters.AddWithValue("@Pname", "2")