从 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的主要内容,如果未能解决你的问题,请参考以下文章

批量从 SQL Server 检索数据

C# 使用 SqlDataReader 从 SQL Server 检索数据到主详细信息列表

使用 VB.NET 表单从 SQL Server 到 Excel 的日期数据检索

如何使用 C# 从 SQL Server 数据库中逐行将数据检索到 datagridview 中

使用 PYMSSQL 通过 *** 从 SQL Server 检索数据

使用Flex / Actionscript从SQL Server检索和下载海量数据的最佳做法是什么?