Будет проще, если код будет разбит на более мелкие части, каждый из которых будет выполнять одно действие. Это упрощает понимание и обновление кода. Таким образом, методы для обновления столбца и отображения DGV будут отдельными.
Для SQL, пожалуйста, обратите внимание, что плохая идея иметь только одно соединение SQL, которое будет использоваться повторно. Существует механизм под названием пул соединений , который упрощает правильный способ выполнения запроса: создайте соединение, используйте соединение, избавьтесь от соединения.
Если вы хотите использовать переменную для имени столбца, вам нужно объединить ее в запрос SQL. Это открыто для SQL внедрения, поэтому необходимо убедиться, что используется допустимое имя столбца, прежде чем что-либо с ним делать.
Для DateTimePickers значение, которое нужно использовать, это .Value
, а не .Text
, в противном случае могут возникнуть проблемы с другими Windows настройками / языковым стандартом.
Итак, этот код является отправной точкой для того, чтобы заставить его работать:
Private Function IsValidColumnName(colName As String) As Boolean
'TODO: Put the valid column names in the array.
Dim validColumnNames = {"Col1", "Col2", "ColWhatever"}
Return validColumnNames.Any(Function(c) colName = c)
End Function
Private Sub UpdateDataInColumn(columnName As String, newData As String)
If Not IsValidColumnName(columnName) Then
Throw New Exception("Invalid column name [" & columnName & "]")
End If
Dim sql = "UPDATE tblWebaccessErrorTrack SET [" & columnName & "] & = @editData WHERE IssueDateTime BETWEEN @frmdate AND @todate AND ErrorDetails LIKE @errorDetails AND ClientIpaddress LIKE @IpAddress AND ResponseStatus LIKE @responseStatus AND TicketNo LIKE @ticketNo"
Using conn As New SqlConnection("Your connection string"),
cmdupdate As New SqlCommand(sql, conn)
cmdupdate.Parameters.Add("@frmdate", SqlDbType.DateTime).Value = frm_DateTimePicker.Value
cmdupdate.Parameters.Add("@todate", SqlDbType.DateTime).Value = to_DateTimePicker.Value
cmdupdate.Parameters.Add("@errorDetails", SqlDbType.NVarChar).Value = "%" + txtErrorDetails.Text & "%"
cmdupdate.Parameters.Add("@IpAddress", SqlDbType.NVarChar).Value = "%" + txtClientIp.Text & "%"
cmdupdate.Parameters.Add("@responseStatus", SqlDbType.NVarChar).Value = "%" + txtResponseStatus.Text & "%"
cmdupdate.Parameters.Add("@ticketNo", SqlDbType.NVarChar).Value = "%" + txtTicketNo.Text & "%"
cmdupdate.Parameters.Add("@editData", SqlDbType.NVarChar).Value = newData '//Data we give
Dim nChanged = cmdupdate.ExecuteNonQuery()
If nChanged > 1 Then
' More than one row was updated. This is probably a Big Problem.
End If
End Using
End Sub
Private Sub ShowDataGridView()
'TODO: write the ShowDataGridView() sub.
End Sub
Private Sub btn_Update_Click(sender As Object, e As EventArgs) Handles btn_Update.Click
Dim colName = "Some method to select a column would go here."
Dim newData = txtEditdata.Text
UpdateDataInColumn(colName, newData)
ShowDataGridView()
End Sub