二进制存入数据库 用ASP.NET2.0在数据库中存储二进制文件(二)来源: 发布时间:星期五, 2008年5月23日 浏览:364次 评论:0
五、上传图像并使用ASP.NET 2.0数据源控件代码存储二进制数据 尽管ADO.NET方法工作在一个 ASP.NET 2.0应用程序环境下,但是,你还能够使用ASP.NET 2.0的数据源控件来把二进制数据存储到一个数据库,这不要求你编写ADO.NET代码。在这个演示程序中所使用的SqlDataSource控件包含了 一个InsertCommand,以及相应于Title,MIMEType和ImageData值的参数:
<InsertParameters>
另外, DetailsView控件包含了两个TemplateField。其中,一个TemplateField中使用一个TextBox控件来显示标题栏;另 一个使用一个FileUpload控件来表示ImageData栏。最终结果是得到一个看上去类似于在"上传图像并使用ADO.NET代码存储二进制数据 "一节中的用户接口。当点击DetailsView的"Insert"按钮时,它的Inserting事件激发,这时二进制数据必须从 FileUpload控件中获取,读到一个字节数组中,并且赋值给适当的参数: Protected Sub UploadPictureUI_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles UploadPictureUI.ItemInserting '确保已经成功上传一个文件 '确保我们在处理一个JPG或GIF文件 "指定MIMEType和ImageData参数的值 就象前面的"Insert"按钮的Click事件处理器一样,该DetailsView的Inserting事件处理器也执行相同的逻 辑-只有一些小小的语法差别。首先,既然FileUpload控件位于一个模板内,所以,必须使用FindControl("controlID")方法 以编程方式来引用它。一旦对它进行了引用,即对之进行相同的检查以确保一个文件被成功上传,并且允许相应的扩展名。对于DetailsView的 Inserting事件处理器存在一个微小的区别是,如果出现了错误,那么,我们需要通知该DetailsView停止相应的插入工作-这是通过把 e.Cancel属性设置为True实现的。 检查完之后,MIMEType和ImageData参数将被使用e.Values("parameterName")=value语法进行赋值。就象在前面的ADO.NET示例中一样,首先把该二进制数据读取到一个字节数组中,然后把该字节数组赋值给该参数。 六、 显示二进制内容 无论你使用什么技术把数据存储在数据库中,为了检索并显示二进制数据,我们需要创建一 个新的ASP.NET页面。这个名字为ShowPicture.aspx的页面,将通过querystring把一个PictureID传递给它,并且从 指定的产品的ImageData域中返回该二进制数据。一旦完成,通过访问/ShowPicture.aspx?PictureID=picutreID 地址即可看到一个特定的图片。因此,为了把一个图像显示在一个web页面上,我们可以使用一个图像控件并把它的ImageUrl属性设置成适当的URL。 注意,这个ShowPicture.aspx在其.aspx页面中并没有包括任何HTML标记。在code-behind类的Page_Load事件处 理器中,将使用ADO.NET代码从数据库中检索指定的Pictures行的MIMEType和ImageData。然后,该页面的 ContentType被设置为MIMEType域的值,并且使用Response.BinaryWrite(ImageData)输出该二进制数据: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '与数据库连接并且返回指定的图片的图像内容和MIME类型 Const SQL As String = "SELECT [MIMEType], [ImageData] FROM [Pictures] WHERE [PictureID] = @PictureID" myConnection.Open() If myReader.Read Then myReader.Close() 0
相关文章
读者评论
发表评论 |