2011-09-20 3 views
1

Exchange 웹 서비스 전자 메일의 전자 메일 본문을 바이트 배열로 변환하려고 시도하지만이 작업을 수행 할 때마다 그것이 SQL image 필드에 삽입 때 그래서 The quick brown foximageSystem.Text.Encoding.ASCII.GetBytes는 각 문자열에서 처음으로 2 바이트를 잃습니다.

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); 
    } 
} 

의 종류에 따라 SQL 데이터베이스 필드에 삽입 한 후 텍스트의 첫 두 글자가 누락 것은 e quick brown fox된다.

변환 과정에서 어떤 일이 발생했거나 SQL에서 image 정의가있는 필드의 2 바이트를 예상하는 경우입니다.

필드의 정의는 필수 코드 포인트가 누락

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

텍스트를 '이미지'로 저장하는 것은 반 직관적입니다. 텍스트를 텍스트로 저장하는 것을 고려 했습니까? – dtb

+0

@dtb -이 소프트웨어는 http://www.thedailywtf.com의 후보입니다. 그리고 유감스럽게도 SQL 스키마를 변경하기에는 너무 많은 작업이 필요합니다. –

+0

2 문자는 무엇입니까? 그들은 그들이 무엇인지에 관계없이 다진 것입니까? –

답변

2

아마 즉시 뭔가를 추가 할 수 있습니다. 그 단계에서 누락 된 2 바이트가 있는지 확인하십시오. 최소한이 기능을 사용하면 GetBytes 호출이 예상대로 작동하는지 확인할 수 있습니다.

+0

아아, System.Text.Encoding.ASCII.GetBytes가 제대로 나오지 않아서 나온 것이 아닙니다. 그리고 그 파일에서 볼 수있는 것은 데이터를 삽입 할 때 SQL 프로파일 러에서 보는 것과 같기 때문에 LINQ-to-SQL 문제가 아닙니다. 뭔가 다른 SQL * 내부의 문제가 있습니다. 이것은 완전히 다른 문제입니다 (예상하지 못한 것). 감사. –

+0

테이블에 트리거가 삽입되어 있습니까? 아마도 처음 2 바이트를 제거하는 것과 같은 이상한 일을하는 펑키 트리거가있을 것입니다. 당신은 그럴 것 같지 않지만 단지 제거해야 할 것이 있다고 생각할 것입니다. –

+0

필자는 SQL 테이블로 올바르게 말할 수있는 한 작성했기 때문에 DB 사용자 (또는 출력을 표시하는 코드일까요?)와 협력해야한다는 것을 알지 못했습니다. –

0

입니다. 나는 LINQ to SQL을 포기하고 SELECT 문을 작성하고 독자를 따라 가서 단순화하는 것이 좋습니다. 그것은 진단을 더 쉽게 만들지는 않을 것이다.

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

다음 헥스 뷰어에서 생성 된 파일을 살펴 가지고 다음 System.Text.Encoding.ASCII.GetBytes 전화 후 같은

+0

나는 SQL 프로파일 러를 실행하고 LINQ가 그것을 검사하는 빠른 방법으로 빌드하는 명령을 볼 수 있다고 생각한다. –

관련 문제