Nano Hash - криптовалюты, майнинг, программирование

Отсутствует точка с запятой (;) в конце инструкции SQL

Я не знаю, где я должен поставить точку с запятой. Вот мой код:

Try
    cn.Open()

    Dim query As String = "INSERT INTO CheckoutTable(PatientID,_Name,_Age,_Gender,_Phone,_Address,_Disease,_DateIN,_DateOUT,_Building,_RoomNo,_RoomType,_UnitPrice,_Status,_MASP,_Price) VALUES('" & txtPID.Text & "','" & txtName.Text & "','" & txtAge.Text & "','" & cmbGender.Text & "','" & txtPhone.Text & "','" & txtAddress.Text & "','" & txtDisease.Text & "',' " & txtDI.Text & " ',' " & txtDO.Text & " ','" & txtRT.Text & "','" & txtBuilding.Text & "','" & txtRN.Text & "',' " & txtMNS.Text & " ',' " & txtUnitPrice.Text & " ',' " & cmbStatus.Text & " ','" & txtPrice.Text & "')" & _
        "DELETE From RegistrationTable where [_Name]='" & ListBox1.Text & "'" & _
        "Select * from RegistrationTable"

    Dim cmds As New OleDbCommand
    With cmds
        .CommandText = query
        .Connection = cn
        .ExecuteNonQuery()
    End With
    MsgBox("Checkout Success", MsgBoxStyle.Information)

    cn.Close()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

  • Вы пробовали ставить пробелы в конце каждой строки SQL? Например. у вас нет пробела между ListBox1.Text & ' и Select. 24.09.2015
  • определенно не лучшая идея выполнять выборку без запроса .... хорошо, на ваш вопрос: непосредственно ПЕРЕД удалением, вам понадобится ; и то же самое верно для вашей вставки, но вы не получите данные с помощью .ExecuteNonQuery() 24.09.2015
  • @ChrisPeacock, сэр, я уже решил свою проблему :) спасибо! 24.09.2015
  • @ThomasKrojer, я уже меняю свой код, сэр. в (вставить запрос, удалить запрос и мой код для элемента отображения в моем списке) 24.09.2015
  • Рассмотрите возможность использования параметризованных запросов, чтобы исключить риск атак путем внедрения SQL. 24.09.2015
  • @StingyJack может быть, но это зависит от того, как вы используете свой код. 24.09.2015
  • @princenhielcada - в приведенном выше коде вы принимаете пользовательский ввод без его дезинфекции, поэтому вы действительно уязвимы. 24.09.2015
  • @princenhielcada Параметризованные запросы — это самый простой способ защититься от атак с помощью SQL-инъекций, а также не подвергать дискриминации ирландцев (O'Donnels и другие имена с апострофами). 24.09.2015

Ответы:


1
Try
    cn.Open()

    Dim insertQuery as String = "INSERT INTO CheckoutTable(PatientID,_Name,_Age,_Gender,_Phone,_Address,_Disease,_DateIN,_DateOUT,_Building,_RoomNo,_RoomType,_UnitPrice,_Status,_MASP,_Price) " & _
                                "VALUES(@PatientID, @Name, @Age, @Gender, @Phone, @Address, @Disease , @DateIn, @DateOut, @Building, @RoomNo, @RoomType, @UnitPrice, @Status, @MASP, @Price) "
    Dim deleteQuery as String = "DELETE From RegistrationTable where [_Name]= @RegName " 
    Dim selectQuery as String = "Select * from RegistrationTable"

    Dim insertCmd As New OleDbCommand
    Dim deleteCmd as New OleDbCommand

    With insertCmd
        .Connection = cn
        .CommandText = insertQuery
        .Parameters.AddWithValue("@PatientID", txtPID.Text)
        .Parameters.AddWithValue("@Name", txtName.Text)
        .Parameters.AddWithValue("@Age", txtAge.Text)
        .Parameters.AddWithValue("@Gender", cmbGender.Text)
        .Parameters.AddWithValue("@Phone", txtPhone.Text)
        .Parameters.AddWithValue("@Address", txtAddress.Text)
        .Parameters.AddWithValue("@Disease", txtDisease.Text)
        .Parameters.AddWithValue("@DateIn", txtDI.Text)
        .Parameters.AddWithValue("@DateOUT", txtDO.Text)
        .Parameters.AddWithValue("@Building", txtBuilding.Text)
        .Parameters.AddWithValue("@RoomNo", txtRN.Text)
        .Parameters.AddWithValue("@RoomType", txtRT.Text)
        .Parameters.AddWithValue("@UnitPrice", txtUnitPrice.Text)
        .Parameters.AddWithValue("@MASP", txtMNS.Text)
        .Parameters.AddWithValue("@Status", cmbStatus.Text)
        .Parameters.AddWithValue("@Price", txtPrice.Text)
        .ExecuteNonQuery()
    End With

    With deleteCmd
        .Connection = cn
        .CommandText = deleteQuery
        .Parameters.AddWithValue("@RegName", ListBox1.Text)
        .ExecuteNonQuery()
    End With
    MsgBox("Checkout Success", MsgBoxStyle.Information)

    cn.Close()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

@StingyJack прав, я мог бы сломать вашу базу данных 6 способами с воскресенья, если бы у меня был доступ к вашему интерфейсу, поскольку в настоящее время вы НИЧЕГО не делаете для смягчения SQL-инъекций. Помимо параметризации ваших запросов для защиты от инъекций, я убрал необходимость иметь ; в конце каждого оператора DML в вашем запросе, разбив их на отдельные команды. Выбор и отображение его результатов я оставляю вам.

24.09.2015
  • Это может удвоить количество строк кода, но его намного легче читать, чем 1-строчный из OP. Хотя я не думаю, что & ListBox1.Text в инициализации deleteQuery нужен. 24.09.2015
  • Нет, спасибо за улов AWinkle. И да, иногда, чтобы сделать что-то правильно, вам нужно быть более многословным. Но я гарантирую, что у маленьких столов с бобби был бы полевой день с оригинальным кодом. 24.09.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..