2011-09-20 38 views
1

我试图将电子邮件的正文从Exchange Web服务电子邮件转换为字节数组,但每次我这样做时,与imageSystem.Text.Encoding.ASCII.GetBytes丢失每个字符串的前两个字节

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类型将其插入SQL数据库字段后的文本的前两个字符缺失时,它的插入SQL image场变e quick brown fox

如果我在转换过程中发生某些事情,或者SQL期望在定义了image定义的字段中领先两个字节,那么我有点失落。

领域的定义是

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

将文本存储为图像是违反直觉的。你有没有考虑过将文本存储为文本? – dtb

+0

@dtb - 这个软件是http://www.thedailywtf.com的候选人 - 不幸的是,改变SQL架构的工作太多。 –

+0

这两个字符是什么意思?不管它们是什么,它们都被砍掉了吗? –

回答

2

也许马上System.Text.Encoding.ASCII.GetBytes电话后,添加类似:

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

然后看看在十六进制查看器生成的文件。看看在这个阶段是否有缺失的两个字节。至少这可以让你验证GetBytes调用是否按照你的预期行事。

+0

啊哈,事实证明,它不是'System.Text.Encoding.ASCII.GetBytes',因为它出来正确。我在该文件中看到的内容与我在SQL Profiler中看到的插入数据的内容相同,因此它不是LINQ-to-SQL问题。 * SQL里面有什么问题,这是一个完全不同的问题(不是我所期望的)。谢谢。 –

+0

桌子上是否有触发器被插入?也许有一个奇怪的东西,如删除前两个字节的时髦触发器。你会认为这不太可能,但只是要消除。 –

+0

我不知道,看到它正在写入,只要我可以正确地告诉SQL表,我必须与我们的数据库人(或者也许它是显示输出的代码?)工作。 –

0

的基本代码点丢失。我建议通过放弃LINQ to SQL并写出SELECT语句并行走读者来查看是否有帮助。它可能不会,但会使诊断更容易。

+0

我想我可以运行SQL分析器并观察LINQ构建的命令作为快速检查它的命令。 –

相关问题