Что не так с этим OleDbReader?

Работая в VB, я подключаюсь к базе данных доступа и мне нужно получить значение из таблицы.

    user = Environment.UserName
    command.CommandText = "SELECT 'nid', 'UserName' FROM qryUSERJOBS WHERE UserName = " & user
    command.Connection = connect
    Using reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            record = reader("nid").ToString
        End While
    End Using

Когда мой код переходит к оператору Using, создается считыватель, и моя форма выигрыша немедленно отображается без чтения базы данных или нажатия End Sub подпрограммы, которая ее содержит. Любые идеи?


person belaythat    schedule 06.07.2015    source источник
comment
оберните свой код в блок Try...catch и установите там точку останова. Я думаю, что вам не хватает одинарных кавычек вокруг вашей пользовательской переменной.   -  person Jeremy    schedule 06.07.2015
comment
Вы не открыли соединение, не так ли? Всегда используйте параметризованные запросы вместо конкатенации строк, чтобы предотвратить внедрение sql и другие проблемы.   -  person Tim Schmelter    schedule 06.07.2015
comment
Не запускайте код (или не вызывайте метод) в OnLoad, переместите его (или не вызывайте метод) в OnShown.   -  person Bjørn-Roger Kringsjå    schedule 06.07.2015
comment
Соединение было открыто в более ранней части кода. Я поставил его в попытке... поймать, и на самом деле получил ошибку для разнообразия. Джереми, ты был прав, мне не хватило одинарных кавычек вокруг моей пользовательской переменной. Спасибо всем за ваши ответы   -  person belaythat    schedule 06.07.2015
comment
несовпадающих галочек можно избежать с помощью параметров   -  person Ňɏssa Pøngjǣrdenlarp    schedule 06.07.2015


Ответы (2)


  • использовать параметризованный запрос
  • избегайте SQL-инъекций
  • Избегайте ошибок в цитатах, подобных этой
  • Используйте одноразовые предметы

Using connect As New OleDbConnection(connectionString)
    connect.Open()
    Using command As New SqlCommand(
    "SELECT nid, UserName FROM qryUSERJOBS WHERE UserName = @user", 
    connect)
        user = Environment.UserName
        command.Parameters.Add(New OleDbParameter("@user", user))

        Using reader As OleDbDataReader = command.ExecuteReader()
            While reader.Read()
                record = reader("nid").ToString
            End While
        End Using

    End Using
End Using
person meda    schedule 06.07.2015

После помещения кода в блок Try...Catch я получил ошибку относительно моих параметров. Мне нужны были одинарные кавычки вокруг моей переменной user.

Исправлен код:

    user = Environment.UserName
    command.CommandText = "SELECT nid, UserName FROM qryUSERJOBS WHERE UserName = '" & user & "'"
    command.Connection = connect
    connect.Open()
    Try
        Using reader As OleDbDataReader = command.ExecuteReader()
            While reader.Read()
                record = reader("nid").ToString
            End While
        End Using
    Catch ex As Exception

    End Try

Спасибо всем за помощь и советы!

person belaythat    schedule 06.07.2015
comment
Я надеюсь, что это не производственный код, потому что вы должны использовать параметры xkcd.com/327. - person Seph; 06.07.2015
comment
Я впервые использую SQL и до вчерашнего дня понятия не имел, какие параметры были, код, используемый в настоящее время, напоминает принятый ответ на сообщение. - person belaythat; 08.07.2015