2016-03-08 2 views
-1

Прошу вас, мне очень нужна ваша помощь. У меня есть следующий код, который возвращает таблицу из доступа ms, отображаемого в виде сетки данных, на основе ввода пользователя. Но когда я попытался запустить его, я столкнулся с ошибкой «Синтаксическая ошибка (запятая) в выражении запроса« lastname = », firstname = '', midname = '' '." Пожалуйста, помогите мнеОшибка синтаксиса: Запятая Выражение запроса SQL-запроса

вот мой код.

Dim sql As String = "SELECT `lastname` as 'FAMILY NAME',`firstname` as 'NAME', `midname` AS 'MIDDLE NAME', `sex` as 'SEX', `birthdate` as 'BIRTHDAY', `Address` as 'ADDRESS', `barangay` AS 'BARANGAY', `patientID` AS 'PID' FROM `tblinformation_offline` WHERE lastname = '" & TextBox1.Text & "' , firstname = '" & TextBox3.Text & "' , midname = '" & TextBox4.Text & "' " 
     Dim cn As New OleDbConnection(constring) 
     cn.Open() 
     Dim da As New OleDbDataAdapter(sql, cn) 
     Dim ds As New DataSet 
     da.Fill(ds, "AccessData") 
     cn.Close() 
     With Me.DataGridView1 
      .DataSource = ds 
      .DataMember = "AccessData" 
     End With 
     ds = Nothing 
     da.Dispose() 
     cn = Nothing 
+1

Много проблем здесь. Но я бы начал рассматривать, как вы пишете предложение WHERE. Проверьте руководство по базе данных (или любое онлайн-руководство по SQL) – Steve

+1

Что такое БД, Access или MySQL - это две очень разные вещи. Вы должны использовать параметры SQL вместо конкатенации строк для запроса. Надеюсь, никто не назван 'D'Artagnan' или' O'Brien' – Plutonix

+0

@Steve, как предложение WHERE ошибочно? –

ответ

1

Первая проблема, предложение WHERE - это одно или несколько условий, связанных логическим оператором типа AND или OR. Ваш WHERE перечисляет ряд значений, и это недопустимый синтаксис.

.... FROM `tblinformation_offline` 
    WHERE lastname = 'xxxxx' 
    AND firstname = 'yyyyyy' 
    AND midname = 'zzzzz" 

Это исправит вашу немедленную ошибку.
Как вы можете видеть, я удалил конкатенацию строк, чтобы вы могли более четко видеть свои ошибки, но теперь возникает проблема использования конкатенации строк для создания sql-запросов. Не делайте этого, но использовать параметризованный запрос

В параметризованном запросе вы используете коллекцию параметров MySqlCommand передать свои ценности, в то время как строка, содержащая текст наполнен заполнителей параметра

Dim sql As String = "SELECT ...... FROM `tblinformation_offline` " & _ 
     "WHERE lastname = @lname AND firstname = @fname AND midname = @mname" 
Using cn As New OleDbConnection(constring) 
Using da As New OleDbDataAdapter(sql, cn) 
    da.SelectCommand.Parameters.Add("@lname", MySqlDbType.VarChar).Value = TextBox1.Text 
    da.SelectCommand.Parameters.Add("@fname", MySqlDbType.VarChar).Value = TextBox3.Text 
    da.SelectCommand.Parameters.Add("@mname", MySqlDbType.VarChar).Value = TextBox4.Text 
    Dim ds As New DataSet 
    da.Fill(ds, "AccessData") 
    cn.Close() 
    With Me.DataGridView1 
     .DataSource = ds 
     .DataMember = "AccessData" 
    End With 
    ds = Nothing 
End Using 
End Using 

Наконец, в тексте запроса есть ошибки. Когда вы пишете

"SELECT `lastname` as 'FAMILY NAME' .... 

Вы создаете записи, в которых значение LastName колонны заполняется строка «Фамилия», потому что вы используете одиночный символ кавычки вместо обратные кавычки, как вы делаете вокруг колонн (то же самое относится и к другим колонкам)

+0

Почему в поле «Выбрать» есть поля « – codeMonger123

+0

omg. ЭТО ФИКСИРОВАННОЕ ЭТО. спасибо за помощь!!! –

+0

@ codeMonger123 символ backticks используется MySql как разделитель вокруг имени столбца и таблицы. (Подобно квадратным скобкам на Sql Server). Они здесь не нужны, потому что столбцы имеют стандартное и не путаное имя, но псевдонимы содержат пробелы. Здесь обратные ссылки требуются – Steve

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