【发布时间】:2017-07-14 08:30:45
【问题描述】:
我在使用 ADODB 库(Microsoft ActiveX 数据对象 6.1 库)从 VB.NET 调用存储过程时遇到了一个小问题。
我有以下存储过程(从 MySQL 复制):
USE [DAB_Eindopdracht_DAB-TH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spAlterTypeVermogen]
@strModel as varchar(30),
@strType as varchar(30),
@intVermogen as int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @inttblTypeID int
DECLARE @inttblModelID int
DECLARE @inttblModelTypeID int
SET @inttblTypeID = (SELECT ID FROM tblType WHERE strNaam = @strType)
SET @inttblModelID = (SELECT ID FROM tblModel WHERE strNaam = @strModel)
SET @inttblModelTypeID = (SELECT ID FROM tblModelType WHERE typeID = @inttblTypeID AND modelID = @inttblModelID)
-- Update QUERY
UPDATE tblModelType
SET intVermogen = @intVermogen
WHERE ID = @inttblModelTypeID
END
然后在我的 VB 代码中,我使用以下代码调用这个存储过程:
Public Sub changeTypeVermogen(ByVal intVermogen As Int16, ByVal strType As String, ByVal strModel As String)
Dim cmdData As New ADODB.Command
cmdData.CommandText = "spAlterTypeVermogen"
cmdData.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
cmdData.Parameters.Append(cmdData.CreateParameter("strModel", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 30))
cmdData.Parameters.Append(cmdData.CreateParameter("strType", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 30))
cmdData.Parameters.Append(cmdData.CreateParameter("intVermogen", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput))
connOpen()
cmdData.ActiveConnection = cnnDatabase
cmdData.Parameters(0).Value = strModel
cmdData.Parameters(1).Value = strType
cmdData.Parameters(2).Value = intVermogen
cmdData.Execute()
connClose()
end sub
现在我的问题是,当我从 MySQL 运行这个存储过程时,它工作得非常好,它完全符合我的要求。
但是当我从我的 VB 应用程序中调用这个过程时,什么也没有发生...... 它贯穿我的方法,根本不会产生任何错误,但它也不会更改我数据库中的任何数据。 我已经检查了我的变量的值,它们在实际的数据库中......这意味着它应该能够完全完成查询。
有没有人可以解释为什么什么都没发生? (并且没有错误出现)。 难道我做错了什么?我错过了什么吗? 提前致谢!
【问题讨论】:
-
MySQL 还是 SQL Server?!
-
这看起来像 sql server 但你说它是 MySql。您需要首先弄清楚您实际使用的是哪个 DBMS。
-
我最好的猜测是为什么没有任何变化是因为您没有任何符合更新语句中条件的行。您可以通过使用连接而不是到处使用多个变量来大大简化更新。
标签: mysql sql-server vb.net stored-procedures adodb