Теперь моя проблема решена, большое спасибо, я изменил свой код, чтобы использовать параметры, и тогда он работает. Теперь мой код:
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
TestConnection()
Dim cmd As OleDbCommand
Dim sql As String
sql = "UPDATE tblUsers SET Username=?, [Password]=?, Usertype=? where UserID=?"
cmd = New OleDbCommand(sql, Conn)
cmd.Parameters.AddWithValue("@p1", txtUserName.Text)
cmd.Parameters.AddWithValue("@p2", txtUserPassword.Text)
cmd.Parameters.AddWithValue("@p3", cbousertype.Text)
cmd.Parameters.AddWithValue("@p4", txtUserID.Text)
cmd.ExecuteNonQuery()
MsgBox("Data Has Been Updated", MsgBoxStyle.Information, "Updated")
ShowUser()
End Sub
Действительно ли использование метода расширения сделает ваш код намного чище , чем использование стандартного вспомогательного метода в вашем классе?
// extension method
foreach (var row in grid.Rows.CheckedRows())
foreach (var row in grid.SelectedRows.CheckedRows())
// standard helper method
foreach (var row in CheckedRows(grid.Rows))
foreach (var row in CheckedRows(grid.SelectedRows))
Если у вас есть исходный код типа, почему вы используете методы расширения? Почему бы вам просто не сделать эти методы расширения членами самого типа?
Методы расширения лучше всего использовать для расширения типов, которые вы не создавали. Хотя они являются полезными инструментами, они представляют собой слой косвенности, который должен быть последним средством, а не первым. Хотя вы можете использовать их для расширения ваших собственных типов, более разумно зарезервировать их для типов, которые вы не создавали.
Если вы расширяете тип, то методы расширения должны быть такими же доступными, как и сам тип.
Лучшие практики также предполагают размещение всех методов расширения в одном месте, предпочтительно в одном статическом классе или в одном пространстве имен.