2011-03-02 47 views
0

好的,我們開始吧!iPhone到MS SQL圖像數據類型轉換問題

我目前正在開發一款iPhone應用程序,該應用程序可用作教堂事件的安全檢查系統。主要目標是能夠爲參與者搜索預先存在的MS SQL數據庫,然後將它們保存到iPhone/iPod Touch/iPad上的列表中。很簡單。 MS SQL數據庫中的一個字段是Image數據類型,其功能是以二進制形式存儲參與者的圖像。我目前不允許切換到varbinary(MAX)。

從iPhone,我使用:

UIImage *image = [UIImage imageNamed:@"nameOfImage.jpg"]; 
NSData *imageData = UIImageJPEGRepresentation(image,1.0); 
NSString *imageString = (NSString *)[[[NSString alloc] init] base64StringFromData:(NSData *)imageData]; 

你可能會疑惑base64StringFromData是什麼。這是這裏討論的一個類別,How do I do base64 encoding on iphone-sdk?

在類別中,它返回一個字符串作爲NSASCIIStringEncoding。然後使用POST將該字符串發送到Visual Basic Web服務。

假設我已經建立並打開了我的SQL連接,並初始化了一個SQL數據適配器和命令。所以功能看起來類似於這樣:

Public Function sendCommand(ByVal image As String) As String 
    Dim commandString As String 
    commandString = "insert into phoneApp(image) values(@image)" 

    Dim encoding As New System.Text.UTF8Encoding 

    sqlDataAdapter.InsertCommand = (commandString, sqlConnection) 
    sqlDataAdapter.InsertCommand.Parameters.Add(@"image", SqlDbType.Image, image.length).Value = encoding.GetBytes(image) 
    sqlDataAdapter.ExecuteNonQuery() 
End Function 

現在,最後,這就是發生了什麼。在另一個函數中,我調用Response.BinaryWrite(SqlDataReader.Item(「image」))。在Internet Explorer中,這樣做會使圖像顯示在瀏覽器中。相反,它以base64形式顯示字符串。將該字符串複製並粘貼到網上的base64轉換器中,並且可以正常工作。所以iPhone上的編碼確實可以編碼到base64。

這是問題。我是否甚至需要將base64編碼保存到Image Data Type中,還是應該專注於學習如何將NSData編碼爲不同的二進制字符串?

回答

0

我明白了,我會回答任何人在這個問題上遇到的問題。祝你在編程中好運。

它實際上比我想象的要簡單得多。只需使用System.Convert傳入InsertCommand中的字節即可。

sqlDataAdapter.InsertCommand = (commandString, sqlConnection) 
    sqlDataAdapter.InsertCommand.Parameters.Add(@"image", SqlDbType.Image, image.length).Value = System.Convert.FromBase64String(image) 
    sqlDataAdapter.ExecuteNonQuery() 

從本質上說,我得到的編碼字符串的字節數,但從來沒有進一步對其進行解碼的路線。所以我在插入表之前使用Convert來停止雙重編碼。