从 Sql Server 检索照片到 asp.net 和 Vb.net
Posted
技术标签:
【中文标题】从 Sql Server 检索照片到 asp.net 和 Vb.net【英文标题】:Retrieve photo from Sql Server to asp.net & Vb.net 【发布时间】:2012-01-16 03:46:24 【问题描述】:这是在 vb.net 照片永远不会出现,我没有错误....???
这就是我在 SQl DB 中存储照片的方式
Sub StartUpLoad()
Dim imgName As String = FileUpload1.FileName
Dim imgSize As Int32 = FileUpload1.PostedFile.ContentLength
Dim photo As Byte() = New Byte(imgSize)
Dim user As String = "kdjhkjgh"
If FileUpload1.PostedFile IsNot Nothing AndAlso FileUpload1.PostedFile.FileName IsNot "" Then
If (FileUpload1.PostedFile.ContentLength > 100240) Then
Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "alert depuis le codehind", String.Format("alert('0')", "Fichier trop gros"), True)
Else
Dim connectionString As String = WebConfigurationManager.ConnectionStrings("BecsEtMuseauxSQL").ConnectionString
Dim con As SqlConnection = New SqlConnection(connectionString)
con.Open()
Dim cmd As New SqlCommand("dbo.addPost", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = user
cmd.Parameters.Add("@titre", SqlDbType.NVarChar).Value = TextBoxTitre.Text
cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = TextBoxDescrip.Text
cmd.Parameters.Add("@image", SqlDbType.Image).Value = photo
cmd.ExecuteNonQuery()
con.Close()
Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "alert depuis le codehind", String.Format("alert('0')", "Post sauvegardé"), True)
End If
End If
End Sub
这是我的处理程序
Public Class Handler : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim connectionString As String = WebConfigurationManager.ConnectionStrings("BecsEtMuseauxSQL").ConnectionString
Dim con As SqlConnection = New SqlConnection(connectionString)
' Create SQL Command
Dim cmd As New SqlCommand()
cmd.CommandText = "Select Titre,Image from Post where ID =@IID"
cmd.CommandType = System.Data.CommandType.Text
cmd.Connection = con
Dim ImageID As New SqlParameter("@IID", Data.SqlDbType.Int)
ImageID.Value = Convert.ToInt32(context.Request.QueryString("ID"))
cmd.Parameters.Add(ImageID)
con.Open()
Dim dReader As SqlDataReader = cmd.ExecuteReader()
dReader.Read()
context.Response.BinaryWrite(DirectCast(dReader("Image"), Byte()))
dReader.Close()
con.Close()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
结束类
这是我的 asp 数据网格
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="Titre" HeaderText="Titre" SortExpression="Titre" />
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" runat="server"
ImageUrl='<%# Eval("ID", "Handler.ashx?ID=0")%>'/>
</ItemTemplate>
<ControlStyle Height="200px" />
</asp:TemplateField>
<asp:ImageField DataImageUrlField="Image">
</asp:ImageField>
</Columns>
</asp:GridView>
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:BecsEtMuseauxSQL %>"
ProviderName="<%$ ConnectionStrings:BecsEtMuseauxSQL.ProviderName %>" SelectCommand="SELECT [ID], [Titre], [Image] FROM [Post]"></asp:SqlDataSource>
你知道为什么我的照片从来没有出现吗???
谢谢你帮助我!!!
【问题讨论】:
而不是将图像存储在表中,可能是您应该存储图像路径(目录) 【参考方案1】:我认为,您的响应不知道您发送的是什么类型的二进制数据(默认为 text/html)。尝试将 ContentType 设置为“image/jpeg”(确切地说,必须有你的图像文件 MIME)。 如果您下载不同的图像类型,最好在您的 addPost 过程中将其 MIME 存储到表 Post 中(您可以为此目的使用 FileUpload1.PostedFile.ContentType 属性)并在处理程序中使用它。
【讨论】:
【参考方案2】:您可以使用 context.Response.ContentType 属性来提及文件详细信息,以便浏览器可以满足基本的渲染需求。
context.Response.ContentType=ImageFormat.Jpeg;
【讨论】:
以上是关于从 Sql Server 检索照片到 asp.net 和 Vb.net的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用 SqlDataReader 从 SQL Server 检索数据到主详细信息列表
使用 VB.NET 表单从 SQL Server 到 Excel 的日期数据检索
如何使用 C# 从 SQL Server 数据库中逐行将数据检索到 datagridview 中