Не называйте переменные так же, как имена классов (DataTable
, datatable
). Vb. net нечувствителен к регистру, поэтому он путает intellisense.
Соединения и команды базы данных должны быть закрыты и удалены , Блоки Using
делают это за вас, даже если есть ошибка.
Вы можете установить строку соединения, передав ее непосредственно в конструктор соединения. Аналогично, вы можете установить текст команды и соединение, передав его конструктору команды.
Не открывайте соединение до тех пор, пока оно не будет использовано. В этом случае нам не нужен DataAdapter
, но если вы используете его, совсем не обязательно открывать соединение. .Fill
метод DataAdapter
откроет и закроет соединение. Однако, если DataAdapter
найдет открытое соединение, оно оставит его открытым.
Чтобы избежать путаницы, я создал 2 таблицы данных. Я использовал одно соединение, но я открывал и закрывал его каждый раз, когда он используется. Он не удаляется до последнего End Using
.
Первая команда возвращает только столбец sy. Замените Column4_Name
на фактическое имя столбца. Мы не хотим извлекать данные, которые нам не нужны, поэтому Select *
.
Всегда используйте параметры, чтобы избежать sql внедрения, которое может повредить вашу базу данных. Вы должны проверить свою базу данных для типов полей. Я должен был угадать. Устанавливается каждое значение параметра, кроме sy, которое изменяется на каждой итерации.
Нет необходимости закрывать соединение после последней команды Select, так как при последнем завершении использования будет закрываться и удалять.
После того, как соединение установлено закрыто, мы обновляем пользовательский интерфейс.
Private Sub OPCode(variable1 As String, variable2 As String, variable3 As String, variable4 As String, variable5 As String)
Dim dtBeforeUpdate As New DataTable()
Dim dtAfterUpdate As New DataTable()
Using mysqlconn = New MySqlConnection("server=localhost;user id=root;password=1234;database=Share")
Using cmd As New MySqlCommand("SELECT Column4_Name FROM name_list;", mysqlconn)
mysqlconn.Open()
dtBeforeUpdate.Load(cmd.ExecuteReader)
mysqlconn.Close()
End Using
Using cmd As New MySqlCommand($"UPDATE Name_list Set Numerology = @Numerologh, FSTLetter = @FST, Timing = @Timing, P_Numerology = @P_Numerology WHERE Symbol = @sy ", mysqlconn)
cmd.Parameters.Add("@Numerology", MySqlDbType.String).Value = $"N-{variable1} S- {variable2}"
cmd.Parameters.Add("@FST", MySqlDbType.String).Value = variable3
cmd.Parameters.Add("@Timing", MySqlDbType.String).Value = variable4
cmd.Parameters.Add("@P_Numerology", MySqlDbType.String).Value = variable5
cmd.Parameters.Add("@sy", MySqlDbType.String)
mysqlconn.Open()
For Each row As DataRow In dtBeforeUpdate.Rows
cmd.Parameters("@sy").Value = row(0).ToString.Trim
cmd.ExecuteNonQuery()
Next
mysqlconn.Close()
End Using
Using cmd As New MySqlCommand("Select * From Name_list;", mysqlconn)
mysqlconn.Open()
dtAfterUpdate.Load(cmd.ExecuteReader)
End Using
End Using
DataGridView1.DataSource = dtAfterUpdate
End Sub
На самом деле, я не понимаю. Похоже, вы обновили всю таблицу с теми же данными. Ожидаете ли вы переменную1, переменную2 и т. Д. c. изменить как-нибудь?