如何使用存储过程在sql中存储图像?

时间:2012-06-21 08:09:06

标签: asp.net sql sql-server stored-procedures

在我的网页图片中从文件上传控件获取并且必须存储在sql server.how中以在sql server中编写保存图像的存储过程?

2 个答案:

答案 0 :(得分:4)

一些示例代码(未经过测试,可能需要一些修复):

CREATE PROCEDURE SaveFile(@id int, @file varbinary(max)) AS

INSERT INTO MyFiles VALUES(@id, @file)
GO

在.NET代码中:

SqlCommand comm = new SqlCommand(@"SaveFile")
comm.CommandType = CommandType.StoredProcedure;

SqlParameter id = new SqlParameter("int", SqlDbType.Int);
id.value = 1; // some id

FileStream fileStream = ... your file;
byte[] buf = new byte[fileStream.length];
fileStream.Read(buf, 0, buf.length);
SqlParameter file = new SqlParameter("@file", SqlDbType.VarBinary, buf.Length);
file.Value = buf;

comm.Parameters.Add(id)    
comm.Parameters.Add(file)

comm.Execute();

答案 1 :(得分:1)

只需使用通常的存储过程,只需使用不同的数据类型,将其另存为字节数组,因此在将其作为参数传递给存储过程之前,必须首先将图像转换为字节数组,保存长度和文件类型同样。

这是一个示例存储过程。我会把剩下的留给你。如果您知道如何在Web应用程序中执行查询,则可以调用此过程。只是google for it。

USE [mydatabasename]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[myprocedurename]

    @ImageFile image,
    @FileType nvarchar(10),
    @FileSize int
AS
-- INSERT a new row in the table.
INSERT [dbo].[mytablename]
(
    [ImageFile],
    [FileType ],
    [FileSize ]
)
VALUES
(
    @ImageFile,
    @FileType,
    @FileSize
)
-- Get the IDENTITY value for the row just inserted.
SELECT @ImageId=SCOPE_IDENTITY()

我猜图像文件类型将会过时,因此您应该使用不同的文件类型来保存字节