将数据库读入列表,然后使用信息做一些事情

时间:2013-12-04 17:29:34

标签: vb.net visual-studio vb.net-2010

将数据库转换为VB中的列表。我基本上使用2个列表,第一个列表包含几个电子邮件地址或者它们的结尾如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

1 个答案:

答案 0 :(得分:0)

显示{e_mail.To.Add(“item”+“Carrier”)}的每个循环的第一行中的行将创建为等于“itemCarrier”作为电子邮件地址的字符串,您可能希望使用它变量项和变量载体,当它们在引号中时,它们不会创建有效的TO地址。如果删除引号并直接使用变量并访问相应的属性,则可能会将您设置在正确的路径上。

就我所知,你的第二个for..each在使用变量方面是正确的。

关于你的代码的另一点......你正在将Scall作为一个新的列表,但是你将数据库变量设置为Scall的值,而Scall似乎没有从任何地方获取值...为了循环Scall列表的外部for-each循环列表需要从某个地方获取一系列值。

要从“调用”列加载列表,您可以运行类似

的内容
...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 to SQL使加工过程快得多,则有更多优化的加载列表的方法,但在您的示例中,您似乎使用ADO,因此我使用了ADO在我的回答中。

你对代码“不工作”非常通用,并没有提供任何真实的细节因为什么不能正常工作所以我只是看着代码,并指出我认为根据什么是直接分析什么不起作用你发布了。