图像的默认varbinary(max)值

时间:2013-08-16 06:09:01

标签: c# sql-server varbinarymax

我有一个Web应用程序,用户可以插入图像。我找到了一种在数据库varbinary(MAX)中设置默认(SQL Server 2008)值的方法。也许像Facebook这样的东西,一旦你注册就有一个默认的个人资料图片。我可以将图像上传到数据库并显示出来。我能够将这些图像生成为PDF文件(if the image column is NOT NULL)否则我得到错误解码我的图像,所以我需要一个默认的varbinary(MAX)图像来表示未插入图像列。请帮助我真正需要它来完成我的项目。

2 个答案:

答案 0 :(得分:1)

如果您正在查看存储文件/图像,我建议您查看FILESTREAM Overview

  

每天创建的大部分数据都是非结构化数据   作为文本文档,图像和视频。这种非结构化数据通常是   存储在数据库外部,与其结构化数据分开。这个   分离会导致数据管理的复杂性。或者,如果数据是   与结构化存储相关联的文件流功能   并且表现可能有限。

     

FILESTREAM将SQL Server数据库引擎与NTFS文件集成在一起   系统通过存储varbinary(max)二进制大对象(BLOB)数据为   文件系统上的文件。 Transact-SQL语句可以插入,更新,   查询,搜索和备份FILESTREAM数据。 Win32文件系统   接口提供对数据的流式访问。

     

FILESTREAM使用NT系统缓存来缓存文件数据。这有帮助   减少FILESTREAM数据可能对数据库引擎产生的任何影响   性能。不使用SQL Server缓冲池;因此,这   内存可用于查询处理。

答案 1 :(得分:0)

您可以使用以下代码将图像或任何类型的文件插入SQL行:

/*get blob from file, store in variable*/
declare @blob as varbinary(max)
set @blob = (
    Select BulkColumn from Openrowset
    ( Bulk 'c:\temp\MyImage.jpg', Single_Blob) as tt)

/* insert blob into row */
insert into dbo.MyImageTable (Name, Blob) 
values('SomeName',@blob)    

使用此功能,您可以在表格上存储单个默认图像,然后使用如下所示的简单连接将其链接到需要默认图像的行:

 select * from MyData join MyImageTable on MyImageTable.Name='SomeName'