как отправить несколько сообщений с помощью datagridview при установке флажка в vb.net ?

#vb.net

#vb.net

Вопрос:

Вот мой код:

 'for clicking the datagridview

Private Sub DataGridView1_CellContentClick_1(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        Try
            MySqlConnection.ConnectionString = "Server=localhost; User=root;Password='';Database=lrbhams;"


            MySqlConnection.Open()
            Dim state3 As String = "select boarder_fname, boarder_contact, guardian, guardian_number from boarders_info"
            Dim command As New MySqlCommand(state3, MySqlConnection)
            'command.Connection.Open()
            command.ExecuteNonQuery()

            MySqlConnection.Close()

            If DataGridView1.Rows(e.RowIndex).Cells(2).Value Then
                TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value

            ElseIf DataGridView1.Rows(e.RowIndex).Cells(4).Value Then
                TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(4).Value
            End If

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        ''
    End Sub
  

Для отправки сообщения:

  Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        Dim message As String
        'Dim reader As MySqlDataReader


        message = RichTextBox1.Text
    If send_sms.SerialPort.PortName = send_sms.portName Then
        send_sms.SerialPort.Write("AT" amp; vbCrLf)
        send_sms.SerialPort.Write("AT CMGF=1" amp; vbCrLf)
        send_sms.SerialPort.Write("AT CMGS=" amp; Chr(34) amp; TextBox1.Text amp; Chr(34) amp; vbCrLf)
        send_sms.SerialPort.Write(message amp; Chr(26))
        MsgBox("Text Message Successfully Send !!!")
        Try

            Dim connectString As String
            Dim conn As New MySqlConnection
            Dim reader As MySqlDataReader
            Dim command As MySqlCommand
            'Dim mysqlQuery As String

            connectString = "server=localhost;user=root;database=lrbhams"
            conn = New MySqlConnection(connectString)

            Dim query As String
            conn.Open()
            query = "INSERT into admin_log_attendance (action,contact_number, date) VALUES ('" amp; RichTextBox1.Text amp; "','" amp; TextBox1.Text amp; "', '" amp; Date.Today amp; "')"

            command = New MySqlCommand(query, conn)
            reader = Command.ExecuteReader
            conn.Close()
        Catch ex As Exception
            MsgBox(ex.Message)

        End Try

    End If

End Sub
  

Комментарии:

1. Вы бы сразу написали лучший код, если бы избегали, Catch ex As Exception особенно если вы тогда только делаете MsgBox(ex.Message) .

2. В чем собственно проблема? Пожалуйста, предоставьте ПОЛНОЕ и ЯСНОЕ объяснение проблемы.

3. @jmcilhinney, вы уверены, что ваш код продолжается до этого раздела? send_sms.SerialPort.PortName = send_sms.PortName. Попробуйте это: MessageBox. Показать («сообщение», «заголовок», MessageBoxButtons. Да)

4. Пожалуйста, включите опцию Strict. Это процесс, состоящий из двух частей. Сначала для текущего проекта — В обозревателе решений дважды щелкните Мой проект. Выберите Compile слева. В раскрывающемся списке Option Strict выберите ВКЛ. Второй для будущих проектов — Перейдите в меню Сервис -> Параметры -> Проекты и решения -> VB Defaults. В раскрывающемся списке Option Strict выберите ВКЛ. Это избавит вас от ошибок во время выполнения.

5. @Mary Спасибо. Я попробую это

Ответ №1:

MySqlConnection является классом в MySql.Data.MySqlClien пространстве имен t. Это не статический класс, поэтому его экземпляр должен быть создан с ключевым словом New. Вы не можете задавать свойства или вызывать методы в самом классе. Вы должны создать экземпляр класса. Наилучшей практикой является использование `Using…Прекратите использование блоков для объектов базы данных. Это гарантирует, что объекты базы данных будут закрыты и удалены, даже если произойдет ошибка.

Select Оператор не является запросом без запроса. Инструкции Insert, Update и Delete можно запускать с command.ExecuteNonQuery но не Select с ними. Select Запрос может быть запущен с .ExecuteScalar , если ожидается один фрагмент данных или .ExecuteReader если ожидается несколько столбцов и / или строк.

Вы не можете просто выполнить Select команду и ожидать, что что-то произойдет. Я подозреваю, что вы хотите отобразить данные в своей сетке, поэтому давайте заполним DataTable (представление возвращенных записей в памяти) с помощью .Load метода, а затем привяжем его к DataGridView .

Нет необходимости закрывать соединение, потому что блок Using закроет его.

Если вы вызываете .ToString класс, который не переопределяет метод, вы просто получите полное имя класса. Exception Класс предоставляет Property вызываемый Message , который вы можете использовать.

Заполнение DataGridView будет происходить отдельным методом, который вы можете вызвать из Form.Load .

Теперь, когда в DataGridView файле есть данные, вы можете нажать на него, и CellContentClick сработает событие. Я надеюсь, что Cell (2) и Cell (4) логические значения, потому что это единственное, почему ваше If утверждение будет работать. Необходимость кода преобразования и .ToString станет очевидной, как только вы включите опцию Strict. (Смотрите Мой комментарий)

На данный момент этого достаточно. Учитывая все это и параметр Strict, вы должны быть в состоянии исправить вторую часть вашего кода.

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    RetrieveRecordsForDataGridView()
End Sub

Private Sub RetrieveRecordsForDataGridView()
    Dim dt As New DataTable
    Try
        Using cn As New MySqlConnection("Server=localhost; User=root;Password='';Database=lrbhams;")
            Dim state3 As String = "select boarder_fname, boarder_contact, guardian, guardian_number from boarders_info"
            Using command As New MySqlCommand(state3, cn)
                cn.Open()
                dt.Load(command.ExecuteReader())
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
    If CBool(DataGridView1.Rows(e.RowIndex).Cells(2).Value) Then
        TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString
    ElseIf CBool(DataGridView1.Rows(e.RowIndex).Cells(4).Value) Then
        TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString
    End If
End Sub