none
如何把圖檔存至SQL Server RRS feed

  • 問題

  • 請教各位先進:

    我要把圖檔存檔至SQL Server(使用ASP.net 2.0),使用Formview將其他欄位存至Sql完了之後,FormView1_ItemInserted的選項內,想要用Sqldatasource.update的方式

             Me.SqlDataSource1.UpdateCommand = "Update pic set b = @b"
             Me.SqlDataSource1.UpdateParameters.Add("@PIC", Session("img"))
             Me.SqlDataSource1.Update()

    將已經把圖檔存至Session中的檔案,要更新Sql server 的Binary 的欄位,但是有錯誤訊息,

            不允許從資料型別 sql_variant 隱含轉換到資料型別 binary, 資料表  'lm.dbo.pic'    資料行 'b' 請使用CONVERT 函數來查詢.

            因為這是看一些書半路出家的,所以不知道該如何處理,麻煩各位先進,能夠幫我解惑.

           謝謝!

    2006年6月19日 下午 02:28

解答

  • 1. UpdateParameter 明白指定型別為 varbinary 會比較好(或是 image,看你的資料型別是用哪種)

    2. 把 Session("img") 轉型成 byte 陣列.

    2006年6月19日 下午 03:32
    版主

所有回覆

  • 1. UpdateParameter 明白指定型別為 varbinary 會比較好(或是 image,看你的資料型別是用哪種)

    2. 把 Session("img") 轉型成 byte 陣列.

    2006年6月19日 下午 03:32
    版主
  • 請問要如何轉成byte陣列? 謝謝!
    2006年6月19日 下午 09:34
  • 我不知道你的 Session 是怎麼來的,但你可以試試:

    Dim imgData As Byte() = CType(Session("img"), Byte())

    2006年6月20日 上午 02:33
    版主
  • Session的來源是透過1個ashx的檔案,畫面上有設定1個Fileupload.旁邊有放入1個button,button按下之後就是以下的程式碼:

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

            Dim fileupload As FileUpload = Me.FormView1.FindControl("FileUpload1")
            Dim img As Image = Me.FormView1.FindControl("Image1")
            Microsoft.VisualBasic.Randomize(My.Computer.Clock.TickCount)
            Dim ImgKey As String = My.Computer.Clock.TickCount & Me.Session.SessionID  & Rnd()
            Application(ImgKey) = fileupload.FileBytes
            img.ImageUrl = "ImageServiceFromSession.ashx?ImgKey=" & ImgKey

            '更新資料用
            Session("img") = fileupload.FileBytes

    End Sub

     

    而ImageServiceFromSession.ashx

         <%@ WebHandler Language="VB" Class="ImageServiceFromSession" %>

         Imports System
         Imports System.Web

         Public Class ImageServiceFromSession : Implements IHttpHandler
       
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
            If context.Request("ImgKey") IsNot Nothing Then
                '設定網頁類型
                context.Response.ContentType = "image/JPEG"
                Dim Imgkey As String = context.Request("ImgKey")
                '讀取圖檔
                If context.Application(Imgkey) IsNot Nothing Then
                    context.Response.BinaryWrite(context.Application(Imgkey))
                    context.Application(Imgkey) = Nothing
                End If
                context.Response.End()
            End If
        End Sub
     
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property

    End Class

    請問小朱大大,這Session 的東西,應該是已經轉換成byte的類型了

    應該是不用再轉換!

    現錯誤訊息變成是"從型別'byte()'至型別'string()'的型別是無效的.

    拜託小朱大大了!

    2006年6月20日 下午 02:38