System.Text.Encoding.ASCII.GetBytes теряет первые два байта из каждой строки - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь превратить тело письма из письма Exchange Web Services в байтовый массив, но каждый раз, когда я делаю это, мне не хватает первых двух символов текста после вставки его в поле базы данных SQLс типом image

byte[] emBodyBytes;

foreach (Item item in findResults)
{
 if (item is EmailMessage)
 {
   EmailMessage em = item as EmailMessage;
   emBodyBytes = System.Text.Encoding.ASCII.GetBytes(em.Body.Text.ToString());

   dEmailMessage thisMailMessage = new dEmailMessage  //LINQ-to-SQL
   {
    emmMessage = emBodyBytes   //This is our byte object of the email body string
   }
   emailDB.dEmailMessages.InsertOnSubmit(thisMailMessage);
  }
}

Так что The quick brown fox становится e quick brown fox, когда он вставляется в поле SQL image.

Где я немного потерян, еслиэто происходит в процессе преобразования или если SQL ожидает два байта для поля с определением image.

Определение поля:

CREATE TABLE [dbo].[dEmailMessages](
    [emmMessage] [image] NOT NULL
)

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Может быть сразу после вызова System.Text.Encoding.ASCII.GetBytes добавить что-то вроде:

System.IO.File.WriteAllBytes("c:\\SomeFile.txt", emBodyBytes) 

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

0 голосов
/ 20 сентября 2011

Основные кодовые точки отсутствуют. Я бы порекомендовал упростить, отказавшись от LINQ to SQL и выполнив инструкцию SELECT, пройдя по читателю и посмотрев, поможет ли это. Это может не сделать, но упростит диагностику.

...