2014-12-28 133 views
3

我有一個角度webapp,我接受base64中的圖像並將它們存儲在T-SQL varbinary中。但是,我將現有的數據存儲在SQL-Server中,該數據顯示爲不同的二進制文件。我需要兩個二進制文件在C#中使用相同的Read/Update方法。存儲C#將base64轉換爲SQL Server varbinary(最大)

在服務中,我試圖將base64字符串轉換爲SQL Server的varbinary,反之亦然。

手動SSMS中,我可以把剛剛以base64字符串,並插入一個一行是這樣的:

Cast(@base64ImgStr as varbinary(max)) 

但結果是不同的,當我嘗試從C#中插入:

Convert.FromBase64String(base64); 

(相同的輸入)。由於二進制是不同的圖像不顯示。我需要一個C#中的方法,它提供了與T-SQL中相同的二進制文件。

我必須是解決方案身邊,因爲我可以投,並獲得在SQL Server中正確的base64(再次,不C#)是這樣的:

cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)') 

相反的base64的,我回去Unicode的符號,否則我會粘貼一個例子。

我需要得到的base64而不調用SQL服務器base64Binary的方法,因爲我的服務內容是這樣的圖片:

Encoding.ASCII.GetString(varbinary) 

如果我轉換手動插入VARBINARY(CAST(@ base64ImgStr爲varbinary(最大值) ))到varchar(max),我得到一個base64字符串,並在我的webapp中適當地顯示圖像。 但是,當我使用C#方法創建二進制文件時,情況並非如此。使用從Convert.FromBase64String(base64)獲得的varbinary類型,我需要在SQL Server(xs:base64binary)中進行中間轉換,以將二進制反轉爲base64。在沒有中間轉換的情況下,我獲得了Unicode符號,並且在webapp中沒有圖像顯示。我不想進行中間轉換,因爲無論用戶上傳圖片還是某人手動插入圖片,我都希望得到一致的結果。

我沒有看到Convert類給出了相同類型的二進制的方法。但那似乎正是我需要的。我懷疑Unicode。請幫忙!

+1

爲了存儲圖像本身,應該存儲'Convert.FromBase64String(base64);'的結果。 'Cast(@ base64ImgStr as varbinary(max))'將存儲base64編碼圖像的二進制表示 - 當您讀回時,您是使用base64解碼/使用base64嗎? –

+0

這裏是我做什麼來存儲更新的圖像:'pm.SponsorImg = Convert.FromBase64String(vm.sponsorImg);'(繼續回答 - brb) – jacoblambert

+0

所以我相信我存儲'Convert.FromBase64String(base64)'的結果' 。但該字節數組不顯示相同的varbinary,因爲當我使用相同的圖像並執行Cast(@ base64ImgStr as varbinary(max))時,會存儲相同的varbinary。這裏是我讀回來的:var base64 = pm.SponsorImg!= null? Encoding.ASCII.GetString(pm.SponsorImg):String.Empty; '我需要繼續以這種方式回讀,因爲圖像將被手動轉換並通過角度上傳。 – jacoblambert

回答

0

這爲我工作:

var image = Convert.FromBase64String(base64); 
string hex = BitConverter.ToString(image); 
hex = hex.Replace("-", ""); 
hex = "0x" + hex; 

這個十六進制,而不鑄造或轉換並顯示在瀏覽器中的圖像保存在varbinary(MAX)場。

相關問題