ADODBライブラリ(Microsoft ActiveX Data Objects 6.1ライブラリ)を使用してVB.NETからストアドプロシージャを呼び出す際に、小さな問題が発生します。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の@を必要とします! – DavidG
これはSQL Serverのように見えますが、あなたはMySqlであると述べています。まず、実際に使用しているDBMSを特定する必要があります。 –
何も変わっていない理由は、更新ステートメントの条件を満たす行がないためです。複数の変数の代わりに結合を使用することで、更新を大幅に簡素化できます。 –