Вопрос преобразования типа данных изображения iPhone в MS SQL - PullRequest
0 голосов
/ 03 марта 2011

Хорошо, поехали!

В настоящее время я занимаюсь разработкой приложения для 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.Это категория, обсуждаемая здесь, Как мне выполнить кодирование base64 на iphone-sdk?

В категории она возвращает строку как NSASCIIStringEncoding.Затем я отправляю эту строку в веб-службу Visual Basic с помощью POST.

Предположим, что я уже установил и открыл свое соединение 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 ("изображение")).После этого в Internet Explorer изображение появится в браузере.Вместо этого он отображает строку в форме base64.Скопируйте и вставьте эту строку в конвертер base64 из сети, и это работает.Таким образом, кодировка на iPhone действительно правильно кодировала в base64.

Вот вопрос.Мне даже нужно кодировать в base64 для сохранения в тип данных изображения, или я должен сосредоточиться на изучении, как кодировать NSData в другую двоичную строку?

1 Ответ

0 голосов
/ 05 марта 2011

Я понял это и оставлю свой ответ любому, кто наткнется на это. Удачи вам в программировании.

На самом деле все было намного проще, чем я думал. Просто используйте System.Convert для передачи байтов в InsertCommand.

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

По сути, я получал байты для строки кодирования, но никогда не декодировал ее дальше. Поэтому я остановил двойное кодирование, используя Преобразование, прежде чем оно было вставлено в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...