Чтение базы данных в список, а затем что-то делать с информацией

Преобразование базы данных в список в VB. По сути, я использую 2 списка. 1-й список содержит несколько адресов электронной почты или их концы, такие как 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("[email protected]")
        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("[email protected]", "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

person Landers_15    schedule 04.12.2013    source источник
comment
Всегда включайте общий языковой тег, даже если вы хотите указать конкретную версию. Я только что добавил тег VB.NET - вы должны получить больше информации.   -  person Neolisk    schedule 05.12.2013
comment
Спасибо, я даже не подумал об этом   -  person Landers_15    schedule 05.12.2013


Ответы (1)


строка в первом для каждого цикла, которая показывает {e_mail.To.Add("item" + "Carrier")}, будет создана как строка, равная "itemCarrier" в качестве адреса электронной почты, и вы, вероятно, захотите, чтобы он использовал переменный элемент и переменный носитель, и когда они в кавычках, как они есть, это не создаст действительный адрес TO. Если вы удалите кавычки и будете использовать переменные напрямую и получите доступ к соответствующим свойствам, это может указать вам правильный путь.

Ваш второй for..each правильно использует переменные, насколько я могу судить.

Еще один момент о вашем коде ... Вы затемняете 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 to SQL, которые значительно ускоряют процесс, но в вашем примере вы, похоже, используете ADO, поэтому я использовал ADO в своем ответе .

Вы были довольно общими словами о том, что код «не работает» и не предоставил никаких реальных подробностей, поскольку ЧТО именно не работало, поэтому я просто смотрю на код и указываю, что, по моему мнению, не работает, на основе прямого анализа того, что вы опубликовали.

person Wizengamot    schedule 14.01.2014