挣扎着从VB.net访问SQL Server存储过程:
DECLARE @R INT
DECLARE @trm VARCHAR(255)
SET @trm = 'PartNumber'
EXECUTE @R = [dbo].[usp_CannedGlobalSearch] @trm
这个SQL语句返回SQL Server Management Studio中12列。伟大的作品。
Dim StoredConn As OdbcConnection = New OdbcConnection(SQLRdrConnectString)
Dim StoredCommand As New OdbcCommand
("CALL usp_CannedGlobalSearch (?)", StoredConn)
StoredCommand.CommandType = CommandType.StoredProcedure
StoredCommand.CommandText = "{? = CALL usp_CannedGlobalSearch(?)}"
StoredCommand.Parameters.Add("@RC", OdbcType.Int) 'this is the result
StoredCommand.Parameters.Add("@trm", OdbcType.VarChar) 'sending a search string
StoredCommand.Parameters("@term").Value = "PartNumber"
StoredConn.Open()
Dim TestInt As Integer = StoredCommand.ExecuteNonQuery()
运行结果:
ERROR [HY105] [微软] [ODBC SQL Server驱动程序]无效的参数类型。
这里是你如何调用SQL Server中的存储过程从VB.NET与您显示参数:
Dim testInt As Integer = -1
Using conn As New SqlConnection(SQLRdrConnectString)
Using cmd As New SqlCommand("usp_CannedGlobalSearch", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter With {
.ParameterName = "@trm",
.SqlDbType = SqlDbType.VarChar,
.Size = 255,
.Value = "PartNumber"})
conn.Open()
Dim res As Object = cmd.ExecuteScalar()
If res IsNot Nothing Then
testInt = Convert.ToInt32(res)
End If
End Using
End Using
与Dim res As Object...
的部分是考虑到什么都没有返回,甚至不为NULL和testInt
的价值将是-1,所以你可以检查这一点。如果存储过程总是返回一个整数,那么它可以只用一行来代替:
testInt = Convert.ToInt32(cmd.ExecuteScalar())