将数据库读取到列表中,然后对信息执行某些操作



在VB中将数据库转换为列表。我实际上使用了两个列表,第一个列表包含几个电子邮件地址或它们的末尾,如EXMPLE"@hotmail.com"。第二个列表是从我已经链接到表单的数据库中的一列中读取的。我会发布我试图使其工作的代码,但它似乎不起作用。假设它充当一个警报系统,可以选择发送给数据库中的1个人或每个人所以请帮助完成这项工作

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim Smtp_Server As New SmtpClient
        Dim e_mail As New MailMessage()
        Dim self As New MailAddress("archernolan151@gmail.com")
        Dim strCarriers As New List(Of String) '@nd half of carriers email
        Dim Scall As New List(Of String) 'List from the linked Column

        Smtp_Server.UseDefaultCredentials = False
        Smtp_Server.Credentials = New Net.NetworkCredential("blank@gmail.com", "password")
        Smtp_Server.Port = 587
        Smtp_Server.EnableSsl = True
        Smtp_Server.Host = "smtp.gmail.com"
        strCarriers.Add("@pm.sprint.com")
        strCarriers.Add("@vtext.com")
        strCarriers.Add("@tmomail.net")
        strCarriers.Add("@txt.att.net")

        rw = ContactsDataSet.Tables(0).NewRow  'Database Columns
        rw.Item("Call") = Scall
        ContactsDataSet.Tables(0).Rows.Add(rw) 'End of database
        If rad1.Checked = True Then   'If the radio button is clicked it will take the data from the Database verses from the text box
            For Each item In Scall
                For Each Carrier As String In strCarriers
                    e_mail = New MailMessage()
                    e_mail.From = self
                    e_mail.To.Add("item" + "Carrier")
                    e_mail.Subject = txtSubject.Text
                    e_mail.IsBodyHtml = False
                    e_mail.Body = txtMessage.Text
                    Smtp_Server.Send(e_mail)
                Next Carrier
            Next
        ElseIf rad1.Checked = False Then
            For Each Carrier As String In strCarriers
                e_mail = New MailMessage()
                e_mail.From = self
                e_mail.To.Add(txtTo.Text + Carrier)
                e_mail.Subject = txtSubject.Text
                e_mail.IsBodyHtml = False
                e_mail.Body = txtMessage.Text
                Smtp_Server.Send(e_mail)
            Next
            End If

        MsgBox("Mail Sent")
    Catch error_t As Exception
        MsgBox(error_t.ToString)

    End Try
End Sub

每个循环第一行中显示{e_mail.To.Add("item"+"Carrier")}的行将创建为等于"itemCarrier"的字符串作为电子邮件地址,您可能希望它使用变量item和变量Carrier,当它们像现在这样用引号括起来时,它将不会创建有效的To地址。如果删除引号并直接使用变量并访问适当的属性,它可能会为您提供正确的路径。

你的第二个。。据我所知,每一个变量的使用都是正确的。

关于代码的另一点。。。您正在将Scall减少为一个新列表,但随后您将数据库变量设置为Scall的值,而Scall似乎没有从任何地方获得值。。。为了获得每个循环Scall列表的外部循环,该列表需要从某个地方获得一系列值。

要从"呼叫"列加载列表,您需要运行类似于以下的内容

...code to connect to database
...code to read to a dataset called tmp with a table that contains the column "Call"
For each dbRow as DataRow in tmp.tables(0).rows
   Scall.Add(dbRow.Item("Call"))
Next 

现在我还没有添加任何类型的错误检查,如果你使用LINQ到SQL,还有更优化的加载列表的方法,这会使过程更快,但在你的例子中,你似乎使用了ADO,所以我在回答中使用了ADO。

你对代码"不起作用"的说法很笼统,没有提供任何真正的细节,因为到底什么不起作用,所以我只是查看代码,并根据对你发布的内容的直接分析表明我认为什么不起。

相关内容

最新更新