CaptainChizni Ответов: 3

Я получаю ошибку "нет значения для одного или нескольких обязательных параметров"


Dim cmd As New OleDb.OleDbCommand
       If MainAdmin.DataGridView4.Rows.Count > 0 Then
           If MainAdmin.DataGridView4.SelectedRows.Count > 0 Then
               Dim strStdID As String = MainAdmin.DataGridView4.SelectedRows(0).Cells("Username").Value
               'open connection
               If Not cnn.State = ConnectionState.Open Then
                   cnn.Open()
               End If
               'delete data
               cmd.Connection = cnn
               cmd.CommandText = "DELETE FROM DAdmin WHERE Username =" & strStdID
               cmd.ExecuteNonQuery()
           End If
       End If
       cnn.Close()


Что я уже пробовал:

Пожалуйста, помогите мне отладить эту строку кодов

[no name]

Отладьте его сами. У нас нет вашего кода, ваших форм, вашего проекта, вашей базы данных, поэтому мы не можем отлаживать их для вас.

Bryian Tan

Убедитесь, что столбец Username находится в базе данных

3 Ответов

Рейтинг:
4

Patrice T

Похоже, ты забыл сказать об этом. strStdID являться строкой

cmd.CommandText = "DELETE FROM DAdmin WHERE Username = '" & strStdID & "'"


Рейтинг:
23

F-ES Sitecore

Если strStdID - это "Джо Блоггс", то какой SQL вы выполняете?

DELETE FROM DAdmin WHERE Username = Joe Bloggs


Это действительный SQL? Что делать, если ваше имя пользователя было "я или 1=1", то ваш SQL был бы

DELETE FROM DAdmin WHERE Username = me or 1 = 1

что тогда будет? (Google "little bobby tables" для подсказки).

Вам нужно поместить текстовые параметры в кавычки, однако лучший способ сделать это-использовать параметры и пусть ado.net разберитесь с этим сами

cmd.CommandText = "DELETE FROM DAdmin WHERE Username = @userID";
cmd.Parameters.AddWithValue ("@userID", strStdID);
cmd.ExecuteNonQuery()


Если вы все еще получаете ошибку это может быть связано с тем что имя пользователя является зарезервированным словом поэтому вам может потребоваться использовать квадратные скобки чтобы база данных знала что вы имеете в виду имя столбца а не зарезервированное слово

cmd.CommandText = "DELETE FROM DAdmin WHERE [Username] = @userID";


CaptainChizni

Спасибо это работает кстати отныне я буду использовать параметризованные запросы

Рейтинг:
1

Peter Leow

Вы должны использовать параметризованный запрос[^] предотвращать SQL-инъекция[^], и это также устранит ошибку, которая заключается в отсутствующих кавычках вокруг 'strStdID', т. е.

cmd.CommandText = "DELETE FROM DAdmin WHERE Username ='" & strStdID & "'"