2014-12-21 7 views
0

Пожалуйста, прочитайте мое описание до того, как вы просто сожжете меня и назовите меня похожим, но другим описанием проблемы/решением!Удаление varbinary (MAX) из столбца SQL Server

У меня есть таблица (изображения), которая содержит 2 столбца - идентификатор (идентификатор, первичный ключ) и ImageData (столбец varbinary (MAX)).

определение таблицы:

USE [ImageDB] 
GO 

/****** Object: Table [dbo].[Images] Script Date: 12/21/2014 11:03:08 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[Images](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [ImageData] [varbinary](max) NULL, 
CONSTRAINT [PK_Images] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

Я могу успешно получить эти записи с помощью первичного ключа. Я могу успешно создать эти записи из загруженных файлов изображений.

Что я не могу сделать, это удалить содержимое столбца ImageData из существующей записи.

Я пытаюсь использовать хранимую процедуру, которая называется ClearImage опорожнить содержимое столбца ImageData:

USE [ImageDB] 
GO 
/****** Object: StoredProcedure [dbo].[ClearImage] Script Date: 12/21/2014 11:06:03 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[ClearImage] 
(
@id  int, 
@image varbinary(max) 
) 
AS 
Begin 
UPDATE Images 
SET ImageData = @image 
WHERE ID = @id 
END 

код Я выполняется (последний тест) является:

SqlConnection connection = new SqlConnection(); 
connection.ConnectionString = "Initial Catalog=ImageDB;Data Source=XXXXXXXXXX;Persist Security Info=False;user id=YYYYYY;password=ZZZZZZZZZZ;"; 
connection.Open(); 
SqlCommand command = new SqlCommand("ClearImage", connection); 
command.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = Convert.ToInt32(ClearKey.Text); 
command.Parameters.Add("@image", System.Data.SqlDbType.VarBinary).Value = System.DBNull.Value; 
command.ExecuteScalar(); 
connection.Close(); 
connection.Dispose(); 

ошибка, которую я последовательно получаю (независимо от того, что я пытаюсь сделать): Процедура или функция 'ClearImage' ожидает параметра '@id', который не был предоставлен.

Пожалуйста, имейте в виду, что я достаточно опытен, чтобы гарантировать, что я предоставил параметр @id (и удостоверился, что это действительное целочисленное значение ключа для записи, которая существует в базе данных).

Я читал здесь многочисленные записи в форуме (в том числе 18170985 и другие) и в других местах, и ни один из них не может обеспечить решение моей проблемы. Я работал над этим в течение нескольких часов безрезультатно.

Кто-нибудь знает, почему он дает мне это непонятное (и неправильное) сообщение об ошибке? Я работаю в Visual Studio 2013 и использую базу данных SQL Server 2008.

Я не могу опубликовать снимок экрана параметров команды из-за ограничения, но, пожалуйста, поверьте мне, оба параметр присутствует, правильно назвали и т.д.

Заранее спасибо!

Линн

+0

Я хотел бы использовать SQL Profiler, чтобы проверить, что именно SQL выполняется. – Eterm

+1

Сообщение далека от неясности, оно на самом деле указывает на проблему.Поскольку вы не инструктируете сервер, что «ClearImage» в тексте команды является хранимой процедурой. Параметры, которые вы отправляете, вообще не используются. – Alejandro

ответ

2

Исключение вы столкнулись две вероятные причины:

  1. Либо параметр не был передан или
  2. тип команды не был указан.

Поскольку в вашем случае [1] исключено, вы должны явно указать тип команды. Таким образом, после этой линии:

SqlCommand command = new SqlCommand("ClearImage", connection); 

просто добавить:

command.CommandType = CommandType.StoredProcedure; 
+0

Вы правы. Я просто нашел его сам, а затем нашел ваш ответ, когда вернусь, чтобы закрыть это. Спасибо за вашу помощь. Вы были совершенно правы в отношении отсутствующего «командного типа», и почему я не видел, что это вне меня - за исключением того, что я, должно быть, искал что-то трудное, а не что-то действительно глупое! – user2247569

+0

@ user2247569 Мы делаем такие ошибки все время! Вы можете принять этот пост в качестве ответа на свой вопрос, чтобы другие люди, имеющие аналогичную проблему, могли воспользоваться этой записью. –

Смежные вопросы