2011-03-02 22 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来停止双重编码。