none
SQL圖檔讀出問題!! RRS feed

  • 問題

  • 環境:Visual Studio C# 2005

    SQL: SQL Server 2005

    目的:將存入SQL的圖檔讀出,顯示在PictureBox上

                    DataTable dt = myglobal.returnDataTable("select image from Picpsch where Pph_no='" + cmbpicname.SelectedValue.ToString() + "'");
    
                    if (dt.Rows.Count > 0)
                    {
                        //MemoryStream
                        Byte[] byteImageCol = (Byte[])(dt.Rows[0]["image"]);
                        MemoryStream stmImageCol = new MemoryStream(byteImageCol);
                        picView.Image = Image.FromStream(stmImageCol);

    但是在某種原因下,我必須要做下面這一個動作   

    string img = (dt.Rows[0]["image"]).ToString();

    但是因為轉換成字串了,我再轉成 Byte[]  圖片就會出現問題!!!

    請問我該如何將字串轉成 Byte[],卻又不會讓圖片出錯???



    IDS

    2012年3月9日 上午 10:01

解答

  • 有試過這樣做嗎:

    string s=Encoding.Unicode.GetString((byte[])dt.Rows[0]["image"]);  //轉成字串

    byte[] buf=Encoding.Unicode.GetBytes(s);   //轉成byte陣列

    • 已標示為解答 kentsl 2012年3月12日 上午 10:05
    2012年3月10日 下午 02:10
  • 那為啥解答會標那個?

    在 .Net 記憶體內任何的字串都必須符合合法的字串,也就是裡面不能有不可轉換字元,因此當把 byte() 隨意轉換成 Unicode 字串時,就會掉字,再把 Unicode 轉換回 byte() 就不會是原來的圖。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 kentsl 2012年3月13日 上午 03:05
    2012年3月12日 下午 12:18

所有回覆

  • 你做這動作的原因為何?

    byte 要轉成字串又能轉回來的,只有 Base64 string,其他的要自己寫轉譯的規則和邏輯。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年3月9日 下午 02:06
    版主
  • 有試過這樣做嗎:

    string s=Encoding.Unicode.GetString((byte[])dt.Rows[0]["image"]);  //轉成字串

    byte[] buf=Encoding.Unicode.GetBytes(s);   //轉成byte陣列

    • 已標示為解答 kentsl 2012年3月12日 上午 10:05
    2012年3月10日 下午 02:10
  • 之前有人在Web問過類似的問題

    [ASP.net WebForm] 請問如何把資料表的圖片檔案傳成字串,再從字串轉成圖片檔寫入資料表?

        byte[] file = (byte[])dr["image"];//取出圖片檔

        string fileString =  "0x" + BitConverter.ToString(file).Replace("-", "");

    圖檔也可以用上述方法轉出16進制字串



    2012年3月11日 上午 07:02
  • 因為之前架構的問題,所以我必須拋給字串存起來

    如果可以處理字串,那我就不需要在去SQL撈一次二進制圖檔!!


    IDS

    2012年3月12日 上午 01:52
  • 那就用 Base64 string 吧。

    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年3月12日 上午 02:27
    版主
  • 測試過~是可以的!!  謝謝

    IDS

    2012年3月12日 上午 10:04
  • 那為啥解答會標那個?

    在 .Net 記憶體內任何的字串都必須符合合法的字串,也就是裡面不能有不可轉換字元,因此當把 byte() 隨意轉換成 Unicode 字串時,就會掉字,再把 Unicode 轉換回 byte() 就不會是原來的圖。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 kentsl 2012年3月13日 上午 03:05
    2012年3月12日 下午 12:18
  • 我也覺得應該是 Base64String才對

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月12日 下午 01:04
    版主
  • 感謝大家熱情的幫我解答,我會再試一下 Base64String的

    IDS

    2012年3月13日 上午 02:57
  • Dear 心冷熱情熄~ 可能是剛好我的圖片[黑白圖片]沒有出現不可轉換的字元,所以我測試才會成功,我會再試  Base64 string 的,感謝您的回覆

    IDS

    2012年3月13日 上午 02:59
  •  Base64 string 測試過也可以!!

    轉貼 心冷熱情熄 的敘述~

    在 .Net 記憶體內任何的字串都必須符合合法的字串,也就是裡面不能有不可轉換字元,因此當把 byte() 隨意轉換成 Unicode 字串時,就會掉字,再把 Unicode 轉換回 byte() 就不會是原來的圖。



    IDS

    2012年3月13日 上午 03:05
  •  Base64 string 測試過也可以!!

    不是叫 "也可以", 我得告訴你,  Base64String 才是正確的做法.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年3月13日 上午 03:11
    版主
  • 不是叫 "也可以", 我得告訴你,  Base64String 才是正確的做法.


    因為運氣好沒碰上不可轉換字元,或是肉眼沒判斷出來轉換前後的差異...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年3月13日 下午 01:09
  • Dear Bill~ 我會修正我的用法,遇到相同的狀況,我會用 Base64string的,感謝您的指教

    IDS

    2012年3月13日 下午 01:31
  • Dear 心冷熱情熄~我也是這樣覺得,算我運氣好,我也會更正我的做法,感謝指教!!

    IDS

    2012年3月13日 下午 01:32