Пожалуйста, включите Option Strict. Это процесс, состоящий из двух частей. Сначала для текущего проекта - в обозревателе решений дважды щелкните «Мой проект». Слева выберите Compile. В раскрывающемся списке Option Strict выберите ON. Второй для будущих проектов - Go в меню «Инструменты» -> «Параметры» -> «Проекты и решения» -> «Настройки VB по умолчанию». В раскрывающемся списке Option Strict выберите ON. Это избавит вас от ошибок во время выполнения.
Updated(StrSql, 15)
Ваша обновленная функция вызывает массив String. 15
не является строковым массивом.
Функциям требуется тип данных для возврата.
cmd.Parameters.AddWithValue("?", X)
cmd
не объявляется.
Невозможно получите ошибку, указанную вами в приведенном выше коде. Он даже не будет компилироваться, не говоря уже о запуске и выдаче ошибки.
Не очень полезно писать функцию, которая пытается быть c общей, но на самом деле очень ограничена.
Давайте начнем с вашего заявления об обновлении.
Dim StrSql = "update student set id=?"
Предоставленное вами утверждение обновит каждый идентификатор в таблице студентов до 15. Это то, что вы намеревались сделать? Поля ID меняются редко. Они предназначены для однозначной идентификации записи. Часто это поля с автонумерацией. Команда обновления будет использовать поле идентификатора, чтобы определить, какую запись нужно обновить.
Не используйте .AddWithValue
. См. http://www.dbdelta.com/addwithvalue-is-evil/ и https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ и еще один: https://dba.stackexchange.com/questions/195937/addwithvalue-performance-and-plan-cache-implications Вот еще https://andrevdm.blogspot.com/2010/12/parameterised-queriesdont-use.html
Поскольку вы не сказали нам, какую базу данных вы используете, я предположил, что это Access из-за знака вопроса. Если это другая база данных, измените типы соединения, команды и dbType.
Using ... End Using block гарантирует, что соединение и команда закрываются и удаляются, даже если есть ошибка.
Private ConStr As String = "Your Connection String"
Public Function Updated(StudentNickname As String, StudentID As Integer) As Integer
Dim RetVal As Integer
Using cn As New OleDbConnection(ConStr),
cmd As New OleDbCommand("Update student set NickName = @NickName Where StudentID = @ID", cn)
cmd.Parameters.Add("@NickName", OleDbType.VarChar, 100).Value = StudentNickname
cmd.Parameters.Add("@ID", OleDbType.Integer).Value = StudentID
cn.Open()
RetVal = cmd.ExecuteNonQuery
End Using
Return RetVal
End Function
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim RowsUpdated = Updated("Jim", 15)
Dim message As String
If RowsUpdated = 1 Then
message = "Success"
Else
message = "Failure"
End If
MessageBox.Show(message)
End Sub
Этот код хранит код вашей базы данных отдельно от кода пользовательского интерфейса.