使用SQL Server存储和访问图片(sqlserver放图片)

图片是网站必不可少的内容之一,早在计算机的发展过程中,就有人利用数据库系统来存储和访问图片。在SQL Server中存储和访问图片可以更有效地使用空间并更加有效地节省时间。

首先,要存储一张图片,可以将图片的内容以Base64编码的形式存储在数据库中,而不是将图片存储在服务器上。例如下面的SQL语句可以将来自磁盘上的图片存储在数据库中:

DECLARE @Image VARBINARY(MAX)
SELECT @Image = CAST(bulkcolumn as VARBINARY(MAX))
FROM OPENROWSET(BULK N’c:\path\MyImage.jpg’, SINGLE_BLOB) x
INSERT INTO Images VALUES (@Image)

另外,可以使用存储过程来查询图片,例如:

CREATE PROCEDURE FindImage
@imageId int
AS
BEGIN
SELECT * FROM Images WHERE id = @imageId
END

最后,要把图片转换成不同的格式,也是相对容易的,例如可以使用以下代码将图片转换成png格式:

DECLARE @myImage VARBINARY(MAX)
DECLARE @myImageDatatype NVARCHAR(20)

SELECT @myImage = [imageData]
FROM Images
WHERE ImageId = @imageId

SELECT @myImageDatatype = [imageType]
FROM Images
WHERE ImageId = @imageId

SELECT CAST(@myImage AS VARBINARY(MAX)) AS [Image]
INTO #temp
EXEC xp_iv_adjust_os_version 0
EXEC sp_OACreate 'WIA.ImageFile',@MyImage OUTPUT
EXEC sp_OASetProperty @MyImage,'SaveFileName','C:\\MyImagePng.png'
EXEC sp_OASetProperty @MyImage,'FormatID',
CASE
WHEN @ImageDatatype='JPG' then 'jpg'
WHEN @ImageDatatype='GIF' then 'gif'
WHEN @ImageDatatype='BMP' then 'bmp'
ELSE 'png'
END
EXEC sp_OAMethod @MyImage,'SaveFile'
EXEC sp_OADestory @MyImage
SELECT * FROM #temp DROP TABLE #temp

通过以上代码,就可以使用SQL Server存储和访问图片了。有了数据库系统,可以更加有效地存储图片,还可以使用编程手段,来自动转换图片,提高对图片的处理效率。


数据运维技术 » 使用SQL Server存储和访问图片(sqlserver放图片)