0
Private Function CreatePlayerAdapter(ByVal playerDBconnection As OleDbConnection) As OleDbDataAdapter 

// инициирующего экземпляры для функцииПопытка удалить запись из моего доступа к базе данных в Visual Basic студии 2010

Dim dataAdapter As OleDbDataAdapter = New OleDbDataAdapter() 
    Dim myCommand As OleDbCommand 
    Dim parameter As OleDbParameter 

// создание строки сказать, где удалить запись из и как найти запись, которую я хочу. // PlayerIDTextBox.Text является текстом на бланке, который заполняется из базы данных после выбора списка имени (это работает правильно) // подключение уже открыто и направлено на правильное место

Dim sql As String = "DELETE * FROM Players WHERE ID ='" & CInt(PlayerIDTextBox.Text) & "'" 
    myCommand = New OleDbCommand(sql, playerDBconnection) 

    parameter = myCommand.Parameters.Add("ID", OleDbType.Char, 3, "ID") 
    parameter.SourceVersion = DataRowVersion.Original 

    dataAdapter.DeleteCommand = myCommand 

    Return dataAdapter 
End Function 

// Я вызываю эту функцию после нажатия кнопки. //ListPlayerComboBox.Text заполняется именами и нужно ему имя, чтобы заполнить PlayerIDTextBox.Text (работает корректно)

Private Sub RemovePlayerButton_Click(sender As System.Object, e As System.EventArgs) Handles RemovePlayerButton.Click 

     If ListPlayerComboBox.Text = " " Then 
      MsgBox("Please Select a Player.") 
    Else 


     Me.CreatePlayerAdapter(playerDBConnection) 

     End If 


End Sub 

// не возникает никаких ошибок. Однако в базе данных ничего не делается. Помоги пожалуйста?

ответ

0

Примечания:

1) Никогда не оставляйте OleDbConnection Open. Только разрешите его открывать, когда вам это действительно нужно. В дальнейшем это избавит вас от многих головных болей. Причины могут быть найдены на following stackoverflow question.

2) Нет причин возвращать OleDbDataAdapter, если вы не собираетесь его использовать.

3) правильно использовать ваши параметры смотрите ниже example2

4) Имейте в виду, что есть некоторые restricted keywords в Access. К счастью для вас ID не один. Ограниченные ключевые слова можно найти здесь: Keywords

У меня, вероятно, отсутствуют некоторые дополнительные пункты здесь. Любой человек должен быть свободен, чтобы добавить их.


Почему бы не настроить ваш Function CreatePlayerAdapter к следующему:

1) Без параметров

Private Sub CreatePlayerAdapter(ByVal playerDBconnection As OleDbConnection) 

    Dim myCommand As OleDbCommand 

    Dim sql As String = "DELETE * FROM Players WHERE ID =" & CInt(PlayerIDTextBox.Text) 
    myCommand = New OleDbCommand(sql, playerDBconnection) 

    playerDBconnection.Open() 
    myCommand.ExecuteNonQuery() 
    playerDBconnection.Close() 
End Sub 

2) с параметрами

Private Sub CreatePlayerAdapter(ByVal playerDBconnection As OleDbConnection) 

    Dim myCommand As OleDbCommand 

    Dim sql As String = "DELETE * FROM Players WHERE ID = @playerId" 
    myCommand = New OleDbCommand(sql, playerDBconnection) 


    Dim param As New OleDb.OleDbParameter(@playerId", CInt(PlayerIDTextBox.Text)) 
    myCommand.Add(param) 

    playerDBconnection.Open() 
    myCommand.ExecuteNonQuery() 
    playerDBconnection.Close() 
End Sub 

Описан метод ExecuteNonQuery executes the query передан команде on the specified OleDbConnection и возвращает количество затронутых строк. Больше информации Here

+0

Ну, у вас есть хорошие моменты здесь, но зачем забывать (я хочу быть) обязательным «ИСПОЛЬЗОВАТЬ ПАРАМЕТРИРОВАННЫЙ ЗАПРОС» один? – Steve

+0

@Steve добавил его. дай мне секунду. Так много ошибок здесь – User999999

+0

Спасибо за ваш вклад. Я отредактировал мой код, чтобы использовать без параметров и выглядит как номер 1 в вашем ответе, но теперь я получаю ошибку «несоответствие типа данных в критериях». Есть идеи? –

 Смежные вопросы

  • Нет связанных вопросов^_^