Member 13936460 Ответов: 1

System.data.sqlclient.sqlexception: 'неправильный синтаксис рядом '='.' кто-нибудь знает, что это за проблема?


Системы.Данных.Sqlclient как.Sqlexception в
HResult=0x80131904
Сообщение=Неправильный синтаксис рядом с '='.
Source=.Net Поставщик Данных SqlClient
Трассировка стека:
в системе.Данных.Sqlclient как.Объект sqlconnection.OnError(исключение SqlException, логическое breakConnection, действие`1 wrapCloseInAction)
в System.Data.SqlClient.SqlInternalConnection.OnError(исключение SqlException, логическое breakConnection, действие`1 wrapCloseInAction)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
в системе.Данных.Sqlclient как.Класс sqldatareader.TryConsumeMetaData()
в System.Data.SqlClient.SqlDataReader.get_MetaData()
в системе.Данных.Sqlclient как.Свойство sqlcommand.FinishExecuteReader(объект sqldatareader, ДС, RunBehavior runBehavior, строки resetOptionsString, логическое isInternal, логическое forDescribeParameterEncryption, логическое shouldCacheForAlwaysEncrypted)
в системе.Данных.Sqlclient как.Свойство sqlcommand.RunExecuteReaderTds(метода commandbehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, логическое асинхронный, типа int32 время ожидания задач&амп; задач, логическое asyncWrite, логическое inRetry, объект sqldatareader, ДС, логическое describeParameterEncryptionRequest)
в системе.Данных.Sqlclient как.Свойство sqlcommand.RunExecuteReader(метода commandbehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, метод String, TaskCompletionSource`1 завершение, типа int32 время ожидания задач&амп; задач, логическое и amp; usedCache, логическое asyncWrite, логическое inRetry)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
в системе.Данных.Sqlclient как.Свойство sqlcommand.ExecuteReader(поведение CommandBehavior, строковый метод)
в системе.Данных.Sqlclient как.Свойство sqlcommand.Метода executereader()
на автомобили.FrmBooking.UsersInformationToolStripMenuItem_click(отправитель объекта, EventArgs e) в C:\Users\Owner\source\repos\CAR\CAR\Form5.vb:line 72
в системе.Окна.Формы.ToolStripItem.Метод raiseevent(ключевой объект, EventArgs в электронной)
в системе.Окна.Формы.Toolstripmenuitem в.OnClick(EventArgs e)
в системе.Окна.Формы.ToolStripItem.HandleClick(EventArgs e)
в системе.Окна.Формы.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в системе.Окна.Формы.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
в системе.Окна.Формы.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
в системе.Окна.Формы.Инструментальная лента.OnMouseUp(MouseEventArgs mea)
в системе.Окна.Формы.Контроль.WmMouseUp(Message& m, кнопка MouseButtons, Int32 клика)
в системе.Окна.Формы.Контроль.WndProc(сообщение& m)
в системе.Окна.Формы.ScrollableControl.WndProc(сообщение& m)
в системе.Окна.Формы.Инструментальная лента.WndProc(сообщение& m)
в системе.Окна.Формы.Управления menustrip.WndProc(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.OnMessage(сообщение& m)
в системе.Окна.Формы.Контроль.ControlNativeWindow.WndProc(сообщение& m)
в системе.Окна.Формы.Родное окно.DebuggableCallback(hwnd элемента указателя IntPtr, int32 и глутамат натрия, указателя IntPtr параметр wparam, указателя IntPtr lparam должен)
в системе.Окна.Формы.Небезопасные методы.DispatchMessageW(MSG& msg)
в системе.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(Int32 причина, контекст ApplicationContext)
в системе.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(Int32 причина, контекст ApplicationContext)
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Онран()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
в корпорации Microsoft.На языке VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(строка[] командная строка)
в CAR.My.MyApplication.Main(String[] Args) in :строка 81

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

Private Sub UsersInformationToolStripMenuItem_click(sender As Object, e As EventArgs) обрабатывает UsersInformationToolStripMenuItem.Щелчок
FrmUser.Показать()
Dim con как новый SqlConnection
Dim cmd как новая команда SqlCommand
Дим ДР в качестве объекта sqldatareader


против.Параметр connectionString = "источник данных=рабочий стол-k1nt5gg\именем sqlexpress;начальный каталог=база данных 1;Комплексная безопасность=истина"
УМК.Подключение = кон
против.Открыть()

УМК.CommandText = "SELECT * FROM User_Register WHERE UserID =" + Label58.Text
dr = cmd.Метода executereader

Если доктор.Читать Далее
FrmUser.Метка2.Текст = д-р("идентификатор пользователя").Метод toString()
Конец, Если


Конец Подводной Лодки

1 Ответов

Рейтинг:
1

OriginalGriff

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

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

И когда вы исправите это через все ваше приложение, проблема, которую вы заметили, также исчезнет...


Member 13936460

Sry, я новичок в программировании, я действительно не понимаю, что вы сказали, Можете ли вы объяснить более простой abit или просто сказать мне, что изменить?

OriginalGriff

Какую часть вы не поняли? Трудно выразить это более простыми словами, если я понятия не имею, где вы начали теряться! :смеяться: