Неверное значение выходного параметра
Я передаю значение параметру в хранимой процедуре, а также объявляю его направление 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
Здесь я ожидаю ImageFileName
быть значением @FileName
параметр, возвращаемый из хранимой процедуры. Тем не менее, это все равно то же значение, что и ImageFileNameNoExt
который был передан на процедуру в первую очередь.
Может кто-нибудь сказать, пожалуйста, что я делаю не так? Благодарю.
РЕДАКТИРОВАТЬ
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]=@FileNameCheck
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 PageID=@PageID) > 0
BEGIN
SET @Layout = (SELECT MAX(Layout) FROM [ContentPages_Images] WHERE PageID=@PageID) + 1
END
INSERT INTO [ContentPages_Images]
(PageID, [FileName], [Layout])
VALUES
(@PageID, @FileName, @Layout)
END
1 ответ
Это наиболее вероятно, потому что вы не указали размер для параметра. Попробуйте изменить код, включив в него размер параметра, как показано ниже:
cmd.Parameters.Add("@FileName", SqlDbType.NVarChar, 100).Value = ImageFileNameNoExt