ストアドプロシージャのパラメータに値を渡していて、その方向をParameterDirection.InputOutput
と宣言しています。ストアドプロシージャでは、パラメータもOUTPUTパラメータとして宣言され、ストアドプロシージャから返される値は正しいです。ストアドプロシージャを単独で実行し、PRINT
を使用してプロシージャ全体で異なる値を表示することをテストしたため、これはわかります。また、ストアドプロシージャの最後の部分は、返されると予想される値を使用してデータベースにレコードを挿入し、期待どおりに表示されます。しかし、SqlCommand
が実行された後にパラメータから値を取得しようとすると、その値はまだストアドプロシージャに渡された以前の値になります。私はこれを前にしています。私はそれを変えなかったと確信しています。ここに私のコマンドの一部です:出力パラメータの値が正しくない
Dim cmd As New SqlCommand("StoredProcedure", Conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = ImageFileNameNoExt
cmd.Parameters("@FileName").Direction = ParameterDirection.InputOutput
cmd.ExecuteNonQuery()
ImageFileName = cmd.Parameters("@FileName").Value
、私は@FileName
パラメータの値になるようにImageFileName
を期待しています、ストアドプロシージャから返されました。しかし、それは最初はImageFileNameNoExt
と同じ値で、プロシージャに渡されました。
私が間違っていることを教えてもらえますか?ありがとう。
EDIT
ALTER PROCEDURE [dbo].[sp_ContentPages_Images_Update]
@PageID int
,@FileName nvarchar(100) OUTPUT
,@Ext nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
--As the FileName is a unique key, ensure that the value being entered into the database will be unique.
--If its not, then we can generate a new one
SET @FileName = REPLACE(@FileName, ' ', '-')
DECLARE @i int
,@FileNameCheck nvarchar(200)
SET @i = 2
SET @FileNameCheck = @FileName + @Ext
WHILE (SELECT COUNT(*)
FROM [ContentPages_Images]
WHERE [FileName][email protected]
AND (@PageID IS NULL OR NOT @PageID=ID)
) > 0
BEGIN
SET @FileNameCheck = @FileName + '-' + CAST(@i as nvarchar(3)) + @Ext
SET @i = @i + 1
END
SET @FileName = @FileNameCheck
--Get new layout value
DECLARE @Layout int
SET @Layout = 1
IF (SELECT COUNT(*) FROM [ContentPages_Images] WHERE [email protected]) > 0
BEGIN
SET @Layout = (SELECT MAX(Layout) FROM [ContentPages_Images] WHERE [email protected]) + 1
END
INSERT INTO [ContentPages_Images]
(PageID, [FileName], [Layout])
VALUES
(@PageID, @FileName, @Layout)
END
あなたが – VMAtm
コード内で欠落しているパラメータの割り当てのカップルがありますことができれば、あなたのSQLプロシージャのコードを提供します。 '@PidID'と' @Ext'です。 –
@Mikael Erikssonええ、大丈夫です、私はもともとファイル名の部分を示していましたが、これは動作していない部分だったからです。他の2つのパラメータも渡されます。 – Leah