请在阅读我之前阅读我的完整描述,然后再向我提出类似但不同的问题描述/解决方案!!
我有一个表(图像),其中包含2列 - ID(标识,主键)和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 :(得分:2)
您遇到的例外有两个可能的原因:
由于在您的情况下[1]被排除,您必须明确指定命令类型。所以在这一行之后:
SqlCommand command = new SqlCommand("ClearImage", connection);
只需添加:
command.CommandType = CommandType.StoredProcedure;