【问题标题】:How to put Dataset query results into the body of an email如何将数据集查询结果放入电子邮件正文
【发布时间】:2015-01-07 22:38:13
【问题描述】:

我正在尝试制作一个程序,将查询结果(在数据集中)通过电子邮件发送给用户...我的代码是:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Paid_Out_TbTableAdapter.Fill(Me.dataset.Paid_Out_Tb)
        Me.ReportViewer1.RefreshReport()
        Try
            Dim SmtpServer As New SmtpClient()
            Dim mail As New MailMessage()
            SmtpServer.Credentials = New  _
            Net.NetworkCredential("Bob", "password")
            SmtpServer.Port = 25
            SmtpServer.Host = "server"
            mail = New MailMessage()
            mail.From = New MailAddress("email@email.com")
            mail.To.Add("Email@email.com")
            mail.Subject = "Test Mail"
            mail.Body = (Me.DataSet.Paid_Out_Tb.ToString)
            SmtpServer.Send(mail)
            MsgBox("mail send")
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

除了发送电子邮件正文外,一切正常...我怎样才能将结果作为正文发送到电子邮件?

【问题讨论】:

  • 您需要它易于人类阅读吗?您可以从 DataSet 中获取 XML 输出,但人们会在尝试阅读它时睁一只眼闭一只眼。
  • 它不会抛出错误,它只是将其作为正文发送:“Paid_Out_Tb” 电子邮件中没有显示其他内容...
  • @JamieSee,是的,它需要在正文中显示结果,以便用户快速理解。
  • 如果我将其更改为:mail.Body = (Me.Paid_Out_TbTableAdapter.Fill(Me.JLI_DataDeliveryServiceDataSet.Paid_Out_Tb)) 电子邮件的正文是“4”,即结果数......所以我只需要找出如何显示结果而不是数字结果...
  • @Shmewnix:您的问题的原因是DataTableToString 方法的所有内容都没有人类可读的输出,就像您在页面上看到的那样。同样,.Fill 方法返回数据表中的行数,如您所说。您需要的所有数据都在数据表中,您只需要自己提取它(或找到其他方法),正如 ron tornambe 在他的回答中所建议的那样。 HTML 表格可能是您最好的选择。

标签: vb.net dataset


【解决方案1】:

您可以使用 Linq 和 VB 的新内联 xml 文字功能来生成 html。试试这个:

Dim payOuts = _
<html>
    <body>
        <table>
            <tr><th>My First Column Header</th><th>My Second Column Header</th></tr>
            <%= From paidOut In Me.DataDeliveryServiceDataSet.Paid_Out_Tb.AsEnumerable _
                Select <tr>
                            <td><%= paidOut.MyFirstColum %></td>
                            <td><%= paidOut.MySecondColum %></td>
                       </tr> %>
        </table>
    </body>
</html>

mail.IsBodyHtml = True 
mail.Body = payouts.ToString

确保在您的项目中包含对 System.Data.DataSetExtensions.dll 的引用(如果它还没有的话)。你的班级还需要Imports System.Linq。请参阅 Éric Moreau 的 Using LINQ and XML Literals to transform a DataTable into a HTML table 博客文章以获得很好的解释。

【讨论】:

  • 这更近了,问题是它仍然没有获取信息...&lt;%= From paidOut In Me.DataDeliveryServiceDataSet.Paid_Out_Tb.AsEnumerable _ Select &lt;tr&gt;&lt;td&gt;&lt;%= paidOut.Store_Id %&gt;&lt;/td&gt;&lt;td&gt;&lt;%= paidOut.Paid_Out_Comment %&gt;&lt;/td&gt;&lt;/tr&gt; %&gt; 没有输出任何内容...我收到一封电子邮件,上面写着“我的第一个列标题我的第二个列标题" 数据集中没有任何内容..
  • 您确定您的 Paid_Out_Tb 表中有数据吗?尝试在新代码之前设置断点并检查内容。
  • 哎呀,好电话...我在 HTML 代码下面有填充...那么自动格式呢?有没有办法让事情进入下一行?由于“评论”部分太大了,如果它太大了,它看起来很傻……它只是标准的 HTML 编码吗?还是基于字符数的自动化?
  • 是的,就像一个网页,但要让 VB 的文字 XML 满意,您需要确保您输入的内容符合 XHTML,即&lt;br/&gt; 不是&lt;br&gt; 等。跨度>
  • 对不起,我想我的意思是......它需要每条记录并包装它......而不是下一行......所以4条记录在同一行。在标题之后。
【解决方案2】:

您需要循环浏览数据集的行并提取您希望通过电子邮件发送的数据。您可以通过添加以下语句使用 HTML 对其进行格式化:

mail.IsBodyHtml = True

【讨论】:

  • 我想找到所有数据...我应该在哪里添加 Mail.isbodyhtml = true?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2019-10-17
  • 2018-07-13
  • 2020-04-06
相关资源
最近更新 更多