none
關於資料庫中有關image的資料型態處理 RRS feed

  • 問題

  • 感謝之前各位的幫忙

    小弟修改之後,已經有了很大的進展
    但,現在又碰上一些困難
    目前小弟的任務是藉由BIDS設計封裝來將資料庫的內容自A轉換到B

    其中A資料庫有一欄位的型態是Binary(max) 
    再透過SSIS將資料讀入時,他會將資料形態轉換為Blob

    小弟參照了MSDN上的一些範例,利用VB Script將Blob資料型態的內容轉換到一個Byte陣列
    程式碼如下
    Dim imgArray As Byte() = Row.MemberImage.GetBlobData(0, CInt(Row.MemberImage.Length))

    之後再存入資料庫的時候,小弟的程式碼為:
    DesComm.Parameters.Add("@MemberImage", OleDbType.VarBinary).Value = imgArray

    但透過profiler擷取所下的指令
    imgArray的內容似乎跟原資料庫的內容長度不相同

    另外,很怪異的狀況是利用SSIS執行insert的指令會說資料會被截斷,小弟認為是因為資料太長,欄位大小設定不足的關係
    於是將imgArray拿掉不要放在insert指令,就會執行正常
    但是我執行透過profiler擷取到的sql commad拿到SQL SERVER裡面去執行,竟然沒發生資料截斷的錯誤,而且正常insert了
    想請問大家是否有碰過類似的麻煩,剛開始我是猜測是不是SSIS執行命令有長度的限制
    但是想想那各錯誤訊息,又不太正確
    所以想請問可能會是什麼問題造成的,還有該如何轉換Blob的資料使其可以轉換回binary的資料型態並且insetrt到目的地
    2010年1月23日 上午 11:23

解答

  • 因為原本資料庫的設定是max 似乎是SQL SERVER 2005的新形態
    目的就是因為原本的varbinary的極限就是8000
    所以多了一個max


    目前我是以VBS直接利用oledb元件來讀出即寫入
    來迴避掉資料型態的問題
    因為原先透過SSIS的元件讀出資料會有型態轉換的狀況
    也謝謝大家的意見,讓我再找資料時有了各方向
    謝謝
    • 已標示為解答 Phoenix W. _ 2010年1月27日 下午 03:13
    2010年1月27日 上午 01:21

所有回覆

  • DesComm.Parameters.Add("@MemberImage", OleDbType.VarBinary ).Value = imgArray
    把型態改為Byte陣列看看

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月23日 下午 01:26
    版主
  • 最好是加上 Size 比較好,例如:
    DesComm.Parameters.Add("@MemberImage", OleDbType.VarBinary , imgArray.Length).Value = imgArray

    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年1月23日 下午 01:29
    版主
  • 想請問一下
    SQL Server 2005開始有支援varbinary(max)的這種資料型態
    讓我不知道size可以設定多少
    我知道之前的varbinary最大就是到8000
    但是現在我要設定size的時候  我就不知道了
    2010年1月25日 上午 12:39
  • 長度設成資料的長度即可,也就是你的圖片資料的 byte 陣列的大小
    如果設成 8000 的話就只能存 8K。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年1月25日 上午 12:43
    版主
  • 因為原本資料庫的設定是max 似乎是SQL SERVER 2005的新形態
    目的就是因為原本的varbinary的極限就是8000
    所以多了一個max


    目前我是以VBS直接利用oledb元件來讀出即寫入
    來迴避掉資料型態的問題
    因為原先透過SSIS的元件讀出資料會有型態轉換的狀況
    也謝謝大家的意見,讓我再找資料時有了各方向
    謝謝
    • 已標示為解答 Phoenix W. _ 2010年1月27日 下午 03:13
    2010年1月27日 上午 01:21