esotericK18 Ответов: 1

C# mysql ERROR 1064 синтаксическая ошибка рядом "D:\DRS\ARTICLES\IMAGE\', 1)' в строке 1


Пожалуйста помочь. Прошло уже несколько часов, а я все еще не могу решить эту ошибку.

Мой вопрос звучит так:
"Вставить в изображение (document_id, image_dir, page_number) ЗНАЧЕНИЯ( '2018-002', 'D:\\DRS\\ARTICLES\\IMAGE\\', 1)"

document_id и image_dir-это VARCHAR, а page_number - INT

сообщение об ошибке было:
Цитата:
У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом "D:\DRS\ARTICLES\IMAGE\', 1)' в строке 1


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

Я уже пробовал поставить ` в качестве разделителя имен столбцов, но все равно безрезультатно.

1 Ответов

Рейтинг:
2

OriginalGriff

Это потому, что у вас есть комбинация символов SQL и C#.
'\'- это специальный символ в C#: он говорит, что "следующий символ должен рассматриваться как символ, независимо от того, что это такое", и позволяет нам, например, вставить двойную кавычку в строку:

string s = "Here\"s Johnny!";
Поэтому, чтобы вставить обратную косую черту в строку C#, мы должны избежать самой обратной косой черты:
string t  = "back\\slash";
Но... MySql также использует обратную косую черту в качестве escape-символа: MySQL :: MySQL 8.0 Справочное Руководство :: 9.1.1 Строковые Литералы[^]
Таким образом, чтобы вставить обратную косую черту в строку MySql из C#, вы должны разрешить обе escape-системы:
string u = "INSERT INTO MyTable (MyColumn) VALUES ('D:\\\\temp\\\\filename.txt')";
Или лучше - передайте его как параметр, чтобы весь этот ужасный беспорядок был mypassed ...