网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

用ASP.NET2.0在数据库中存储二进制文件

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
在此,这个事件处理器首先确保已经上传一个文件。然后,它根据被上传的文件的扩展名来决定MIME类型。

上面最值得注意的是那些设置@ImageData参数的代码部分。首先,创建一个名为imageBytes的字节数组并且使其长度为被上传的文件相应的InputStream。然后,从InputStream中使用Read方法把二进制内容填入这个字节数组。注意,正是这个字节数组被指定为@ImageData的值。

  五、上传图像并使用ASP.NET 2.0数据源控件代码存储二进制数据

   尽管ADO.NET方法工作在一个ASP.NET 2.0应用程序环境下,但是,你还能够使用ASP.NET 2.0的数据源控件来把二进制数据存储到一个数据库,这不要求你编写ADO.NET代码。在这个演示程序中所使用的SqlDataSource控件包含了一个InsertCommand,以及相应于Title,MIMEType和ImageData值的参数:

<asp:SqlDataSource ID="UploadPictureDataSource" runat="server"
ConnectionString=""
InsertCommand="INSERT INTO [Pictures] ([Title], [MIMEType], [ImageData]) VALUES (@Title, @MIMEType, @ImageData)">

<InsertParameters>
<asp:Parameter Name="Title" Type="String" />
<asp:Parameter Name="MIMEType" Type="String" />
<asp:Parameter Name="ImageData" />
</InsertParameters>
</asp:SqlDataSource>

  注意,在此,ImageData参数并没有指定一个类型。如果你试图使用GUI向导来构建SqlDataSource的语法,那么,它将可能给它指定Type="Object",然而,这个Type="Object"将会产生一个sql_variant类型的参数。然而,该sql_variants类型不能用来存储图像或varbinary(MAX)数据类型,因为该sql_variant的内在数据大小不能超过8,000个字节。(如果你试图使用Type="Object",然后试图保存超过8,000字节大小的二进制数据,那么,系统将抛出一个异常并显示消息"Parameter ''@ImageData'' exceeds the size limit for the sql_variant datatype";如果你试图添加不到8,000字节大小的二进制数据,那么,该异常将显示消息"Implicit conversion from data type sql_variant to varbinary(max) is not allowed")。

  另外,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
  ''引用FileUpload控件
 Dim UploadedFile As FileUpload = CType(UploadPictureUI.FindControl( "UploadedFile"), FileUpload)

 ''确保已经成功上传一个文件
 If UploadedFile.PostedFile Is Nothing OrElse String.IsNullOrEmpty(UploadedFile.PostedFile.FileName) OrElse UploadedFile.PostedFile.InputStream Is Nothing Then
  显示错误信息
  e.Cancel = True
 Exit Sub
End If

''确保我们在处理一个JPG或GIF文件
Dim extension As String = Path.GetExtension(UploadedFile.PostedFile.FileName).ToLower()
Dim MIMEType As String = Nothing
Select Case extension
 Case ".gif"
  MIMEType = "image/gif"
 Case ".jpg", ".jpeg", ".jpe"
  MIMEType = "image/jpeg"
 Case ".png"
  MIMEType = "image/png"
 Case Else
  ''无效文件类型上载
   显示错误信息
  e.Cancel = True
  Exit Sub
End Select

"指定MIMEType和ImageData参数的值
e.Values("MIMEType") = MIMEType
''把FileUpload的InputStream加载进字节数组中
Dim imageBytes(UploadedFile.PostedFile.InputStream.Length) As Byte
UploadedFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length)
 e.Values( "ImageData") = imageBytes
End Sub

 
  • 下一篇资讯: ASP.NET 2.0页面性能优化
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号