2015-05-06 2 views
-2

Мои команды:Какова синтаксическая ошибка в моем SQL?

sql = "UPDATE tbl_employees SET Username_= """ & TextBox1.Text & """, Password_= """ & TextBox2.Text & """, Temporary=" & False & " WHERE Username_ = """ & EmployeeLogin.loginusername & """ AND Password_ = """ & EmployeeLogin.loginpassword & """" 

Что такое ошибка синтаксиса? Спасибо за любую помощь.

+3

Вам действительно нужно подумать о параметризованных запросах. Ваше приложение открыто для SQL Injections – cha

+0

чувак это для школьного проекта, который буквально никогда не будет затронут снова после этой пятницы, вы знаете, почему его бросает синтаксическую ошибку? –

+0

Что содержит переменная sql сразу после выполнения вышеуказанного оператора? Со всеми этими цитатами это такой MESS, что я действительно не хочу его декодировать. – fvu

ответ

-1

пытаются писать И вместо символа & в SQL

+0

В SQL не существует '&', то есть для объединения строк для создания SQL. – Guffa

-1

Я думаю, что проблема с частью:

Temporary=" & False & " 

Попробуйте изменить это

Temporary=0 

vb.net булевой тип False будет преобразован в строковое представление «False» в этом выражении, которое, на мой взгляд, SQL будет недооценивать. Предполагая, что ваша колонка является столбцом бит, вам лучше использовать 0 или 1.

0

MS Access использует механизм базы данных Jet (http://en.m.wikipedia.org/wiki/Microsoft_Jet_Database_Engine), в котором временное зарезервированное слово. Смотрите список зарезервированных слов здесь:

https://support.microsoft.com/en-us/kb/321266

Поместите имя таблицы в квадратные скобки, например:

[Temporary] 
0

Раствор уже писал, но вот некоторые бесплатные консультации.

Когда вы сталкиваетесь с такой ошибкой, используйте инструмент отладки, чтобы зафиксировать фактическое значение в переменной.

  • Используя инструмент выполнения запроса, выполните SQL «вручную».
  • Посмотрите, указывает ли сообщение об ошибке сообщение об ошибке.
  • Если нет, удалите небольшую часть SQL из запроса, например AND Password_ = "blahBLAHblah", и выполните снова.
  • Повторите последний шаг, пока ошибка не исчезнет.
  • Последний бит удалённого кода должен быть причиной проблемы.
  • Повторно отправьте исходный запрос только с одной части, чтобы подтвердить, что проблема есть.

Это не всегда так просто, но методичный пошаговый подход может обычно определять источник ошибки.

0

Решение уже отправлено, но я оставлю это здесь только для справки. Это удобно и легко читать, используя параметры. Это может быть использовано в качестве альтернативы вашему коду. Предполагая, что вы используете VB.NET и TSQL.

Dim SqlCmd As String = " UPDATE tbl_emlployees SET Username_ = @username, Password_ = @password, Temporary = @temporary, WHERE Username_ = @myUsername AND Password_ = @myPassword" 
     Using execSQLQuery As SqlCommand = New SqlCommand(strSqlCmd, myConn.dbConn) 
      execSQLQuery.Parameters.AddWithValue("@username", TextBox1.Text) 
      execSQLQuery.Parameters.AddWithValue("@password", TextBox2.Text) 
      execSQLQuery.Parameters.AddWithValue("@temporary", "False") 
      execSQLQuery.Parameters.AddWithValue("@myUsername", MyUsernameVariable) 
      execSQLQuery.Parameters.AddWithValue("@myPassword", MyPasswordVariable) 

      execSQLQuery.ExecuteNonQuery() 
     End Using 

execSQLQuery это просто временная переменная, после Using она будет просто утилизировать.