none
[vb2003]如何儲存圖片到資料庫(ms sql server 2000) RRS feed

  • 問題

  • 本人曾直接試用以下query來insert圖片:
    INSERT INTO Imagetb ( Picture)
    SELECT  *  FROM OPENROWSET(BULK c:\1.jpg', SINGLE_BLOB) AS picture
    但出現error如下:
    Server: Msg 156, Level 15, State 1, Line 2
    Incorrect syntax near the keyword 'BULK'.

    在沒找到解決方法下決定用vb去做
    本人看了不少post,說要先把圖片轉成byte array才可以insert
    我己轉好了byte array(已試驗沒問題), 再用以下的code去insert:
    Dim cmd As New SqlCommand("insert into imagetb(images) values(@bytearray)")
    cmd.Parameters.Add("@bytearray", SqlDbType.Image).Value = tmp ---tmp 是已有的byte array
    但我cmd.executeNonQuery後發現image是空的
    請問我的code是那裡出問題呢
    2009年7月17日 上午 05:39

解答

  • '資料庫存的資料型態是二進位檔案,所以要用FileStream讀入到一個 Byte 陣列
    Dim fs As New FileStream(Me.TextBox1.Text, FileMode.Open, FileAccess.Read)
    Dim buf(fs.Length - 1) As Byte
    fs.Read(buf, 0, fs.Length)
    fs.Close()
    fs.Dispose()

    cmd.Parameters.Add("@bytearray", SqlDbType.Image).Value  = buf

    取出圖片
    Dim buf As Byte() = cmd.ExecuteScalar()
    Dim ms As New MemoryStream(buf)
    Dim bmp As New Bitmap(ms)
    Me.PictureBox2.Image = bmp

    • 已標示為解答 ccl0801 2009年7月17日 上午 06:21
    2009年7月17日 上午 06:00

所有回覆

  • '資料庫存的資料型態是二進位檔案,所以要用FileStream讀入到一個 Byte 陣列
    Dim fs As New FileStream(Me.TextBox1.Text, FileMode.Open, FileAccess.Read)
    Dim buf(fs.Length - 1) As Byte
    fs.Read(buf, 0, fs.Length)
    fs.Close()
    fs.Dispose()

    cmd.Parameters.Add("@bytearray", SqlDbType.Image).Value  = buf

    取出圖片
    Dim buf As Byte() = cmd.ExecuteScalar()
    Dim ms As New MemoryStream(buf)
    Dim bmp As New Bitmap(ms)
    Me.PictureBox2.Image = bmp

    • 已標示為解答 ccl0801 2009年7月17日 上午 06:21
    2009年7月17日 上午 06:00
  • HI,

    您可以參考以下這個完整的範例:
    Save an Image to SQL Server
    2009年7月17日 上午 06:09
  • 謝謝你的協助
    我已成功解決問題

    2009年7月17日 上午 06:22