微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 PowerShell 在电子邮件中发送 sql 查询的结果

如何解决使用 PowerShell 在电子邮件中发送 sql 查询的结果

我正在尝试使用 PowerShell 通过 Azure Runbook 在电子邮件中发送 av sql 查询的结果。 sql 查询有效,结果打印到控制台,但不会打印在电子邮件中。相反,我在电子邮件“System.Data.DaTarow”中收到以下文本。与我的数据库的连接工作正常,它输出到控制台只是没有在电子邮件中打印。

这是我目前所拥有的:

$sqlQuery = "SELECT
          SUM([Cost]) AS [Sum Cost]
      FROM [dbo].[TestData]
      ;"

$DataSet = New-Object System.Data.DataSet
    $sqlCmd.CommandText = $sqlQuery
    $sqlAdapter.Fill($DataSet)  
    $DataSet.Tables[0]

Send-MailMessage -From "me@gmail.com" -To "you@gmail.com" -Subject "Sum cost" -Body "This is the Sum Cost: $($DataSet.Tables[0])" -SmtpServer mail.net -Credential $Cred -Port $Eport

解决方法

问题在于系统中没有定义的方法可以将 DataTable 转换为字符串。这意味着你必须这样做。

你可以这样做:

$Body = $DataSet.Tables[0] | ConvertTo-Html -As Table

或者像这样将其格式化为表格或列表,然后对该输出进行字符串化:

$Body = $DataSet.Tables[0] | Format-Table -AutoSize | Out-String

这两种方法都有一些注意事项和问题,比如 HTML 表格上的默认格式非常糟糕,Format-Table 的最大宽度可能难以克服,但这种方法通常是您需要使用的.


或者,如果您的查询真正返回单行单列,您可以轻松地自己从 DataSet 中提取数据:

$SumCost =  $DataSet.Tables[0].Rows[0].'Sum Cost'

Send-MailMessage -From "me@gmail.com" -To "you@gmail.com" -Subject "Sum cost" -Body "This is the Sum Cost: $SumCost" -SmtpServer mail.net -Credential $Cred -Port $Eport

或者,如果真的那么简单,您可以 use SqlCommand.ExecuteScalar 而不是完全搞乱 DataSet 和 DataAdapter。 ExecuteScalar 旨在仅返回结果集第一行的第一列,仅此而已。然后你可以这样做:

$SqlCmd.CommandText = $SqlQuery

try {
    $SqlConnection.Open()
    $SumCost = $SqlCmd.ExecuteScalar()
}
finally {
    $SqlConnection.Dispose()
}

$SumCost 应该只是您的价值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。