SSIS Script Task发送邮件无法正确展示查询数据问题排查求助
问题排查与解决方法
核心问题原因
你在脚本中直接对Dts.Variables["变量名"]对象执行ToString()方法,该方法默认返回对象的类型描述而非变量存储的业务值,这就是你邮件中全是Microsoft.SqlServer.Dts.Runtime.Variable文本的原因。
修复方案
访问SSIS变量的真实值需要调用.Value属性后再转字符串,修正后的message拼接代码如下:
message = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}", Dts.Variables["User::CustomerNumber"].Value.ToString(), Dts.Variables["User::ReceivingLocation"].Value.ToString(), Dts.Variables["User::StrainName"].Value.ToString(), Dts.Variables["User::StrainCode"].Value.ToString(), Dts.Variables["User::Age"].Value.ToString(), Dts.Variables["User::Sex"].Value.ToString(), Dts.Variables["User::Genotype"].Value.ToString(), Dts.Variables["User::SentFrom"].Value.ToString(), Dts.Variables["User::OrderQuantity"].Value.ToString());
其他可选优化建议
- 空值兼容处理:如果变量可能返回数据库NULL值,建议添加空判断避免运行报错,示例写法:
Dts.Variables["User::CustomerNumber"].Value?.ToString() ?? "" - 多明细拼接优化:当前写法在For循环容器中每次执行都会覆盖
EmailMessage的内容,最终邮件只会保留最后一条明细。如果需要展示所有订单明细,可将表头header赋值逻辑放到循环外的脚本中执行,循环内每次仅追加明细内容:
// 循环内仅追加明细 Dts.Variables["User::EmailMessage"].Value = Dts.Variables["User::EmailMessage"].Value.ToString() + Environment.NewLine + message;
内容的提问来源于stack exchange,提问作者user4912134
相关产品推荐
相关产品推荐

