我正在使用Exchange Web服务从电子邮件中获取文本并将其添加到数据库中。所以我这样开始:
$PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet(
[Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties);
$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text;
$email_obj = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($service,$itemID);
$email_obj.Load($PropertySet);
#getting rid of replies
$Message = $email_obj.Body.Text -replace '\s+', ' '
if($Message -like "* From: *"){
$Message = ($Message -split " From: ")[0]
}
if($Message.IndexOf('_') -ne (-1)){
$Message = $Message.Remove($Message.IndexOf('_'))
}
然后,我在SQL Server中插入电子邮件正文:
$query = "INSERT INTO DB.Table ([ID],[Message],[Sender],[Recipient],[TimeStamp])
VALUES ($ID,'$Message','$Sender','$Recipient',{0})" -f (Get-TimeStamp)
Invoke-Sqlcmd -Query $query -ServerInstance $server
但是INSERT
在作为消息的字符串前面添加了?
。尝试在执行INSERT
之前格式化字符串,但它没有帮助。找不到任何隐藏的字符,例如\n
,\r
,\t
或\s
。
只有我从电子邮件正文中获取的字符串才能生成此字符结果
答案 0 :(得分:1)
解决方案与数据格式有关,就像每个人都说的那样。该列为nvarchar
,并且不确切知道我尝试插入的字符串是什么数据格式,但有时会有1个或多个unknown characters
。要解决此问题,只需在表格中N
添加INSERT
前缀,如下所示:
$query = "INSERT INTO DB.Table ([ID],[Message],[Sender],[Recipient],[TimeStamp])
VALUES ($ID,N'$Message','$Sender','$Recipient',{0})" -f (Get-TimeStamp)
Invoke-Sqlcmd -Query $query -ServerInstance $server
来自@AaronBertrand的This article解释了SQL中的数据格式。