内容摘要:SQL Server:存储图像和BLOB文件(三)要集中讨论了VARBINARY(MAX)数据类型。本文第一部分的代码例子将图像加载到数据库,然后通过使用aspx页面对该图像进行检索和显示。本文将创建一个基于网络的应用程序用来将图像插入到SQL Server里。
现在,图像数据就可以传递进入SQL参数,并运行了:
paramFileData.Value=bImage;
objCmd.ExecuteNonQuery();
运行该应用程序
在浏览器中查看该网页,点击浏览按钮。这时会出现一个如下所示的文件选择窗口:

浏览文件夹选择好文件后点击完成按钮,就会执行上面创建的SQL存储过程。在SQL Server内部查看运行结果,会显示有二进制数据,但不会显示数据的真实内容:

因为SQL Server本身不带有BLOB浏览器,所以我们要自动动手制作一个类似于前一篇文章所示的浏览器,不同的是这个浏览器通过存储过程驱动的。
浏览器
创建一个简单的可以选择图像数据的存储过程,T-SQL代码如下:
CREATEPROCEDUREBLOBViewer
AS
SELECTBLOBData
FROMBLOBFromWeb
接下来,制作一个代码分离的aspx网页。在代码分离页面添加SQL Server的使用语句:
usingSystem.Data.Sql;
usingSystem.Data.SqlClient;
在Page_load的部分,使用下面的代码执行刚刚创建的存储过程:
stringsConn=@"server=.;database=BLOBTest3;IntegratedSecurity=True";
SqlConnectionobjConn=newSqlConnection(sConn);
objConn.Open();
SqlCommandobjCmd=newSqlCommand("BLOBViewer",objConn);
objCmd.CommandType=CommandType.StoredProcedure;
SqlDataReaderdr=objCmd.ExecuteReader();
dr.Read();
Response.BinaryWrite((byte[])dr["BLOBData"]);
objConn.Close();
这里的网页浏览器代码和前一篇文章中的代码很相似,不过把CommandType变成了Stored Procedure,而且SQLCommand的执行使用了该存储过程名而不是一串SQL字符串。
总结
SQL Server可以作为存储图像和BLOB数据的便携容器使用,不过处理二进制数据和处理ASCII有所不同:存储在SQL Server内部的数据并不像字符数据那样能看到它们是什么样子的;此外,在将数据发送到SQL Server之前,还需要对数据进行一些特殊处理,例如使用字节数组。不过总体而言,在SQL Server中使用和存储BLOB文件还是很有价值的。
来源:IT专家网 作者:cyw 责编:豆豆技术应用