powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
6 сообщений из 6, страница 1 из 1
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39766819
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Проблема, с которой столкнулся не понял к чему относится: к C# или к СУБД SQLite, поэтому пишу здесь.

Итак, начинаю работать с SQLite в C# приложении.
Свежий SQLite установил через nuget-пакет. Версия ядра 3.24.0 в Visual Studio 2017.
Все хорошо, пока не стал переходить на GUID'ы.

В таблице Settings поле Id типа GUID, создавал так:

Код: sql
1.
CREATE TABLE Settings (Id GUID PRIMARY KEY, Name TEXT NOT NULL UNIQUE, Value TEXT NOT NULL)


В таблице точно есть запись с гуид: 6cd48253-1258-42c4-9734-bdd2b2986fe9

Делаю запрос:

Код: c#
1.
2.
3.
4.
string sqltext = "SELECT * FROM Settings WHERE Id='6cd48253-1258-42c4-9734-bdd2b2986fe9'";
SQLiteDataAdapter da = new SQLiteDataAdapter(sqltext, cn);  // cn - открытый коннекшен к базе
DataTable t = new DataTable();
da.Fill(t);


Но t.Rows.Count = 0, то есть не нашла!

В чем подвох?
На просторах интернета пишут, что сравнение с гуидом идет в бинарном виде и нужно указать, что в кавычках 'e57c2d28-c382-4160-992f-5630c13209d2' не строка, а именно GUID.
Для этого поставить 'x' перед апострофом, то есть x'6cd48253-1258-42c4-9734-bdd2b2986fe9'

Пробую, но так выдает ошибку:
SQL logic error: unrecognized token: "x'6cd48253-1258-42c4-9734-bdd2b2986fe9'"

Может PRAGMA какую выставить сразу после подключения к БД, но опций, связанных с GUID не нашел.
...
Рейтинг: 0 / 0
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39766820
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если тупо выкинуть из строки тире
Код: sql
1.
SELECT * FROM Settings WHERE Id=X'6cd48253125842c49734bdd2b2986fe9'


то ошибку не выдает, но и не находит запись
...
Рейтинг: 0 / 0
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39766825
AlexV1,

Плохая идея писать значение параметров в тело скрипта. Пользуйтесь параметрами , и проблем с кавычками точно не будет.
...
Рейтинг: 0 / 0
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39766826
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В sqlite3.exe все работает
Код: sql
1.
2.
3.
CREATE TABLE Settings (Id GUID PRIMARY KEY, Name TEXT NOT NULL UNIQUE, Value TEXT NOT NULL);
insert into Settings (id, name, value) values ('6cd48253-1258-42c4-9734-bdd2b2986fe9', 'nnn', 'vvv');
SELECT * FROM Settings WHERE Id='6cd48253-1258-42c4-9734-bdd2b2986fe9';


Результат
Код: plaintext
6cd48253-1258-42c4-9734-bdd2b2986fe9|nnn|vvv

Проблема явно не в SQLite, а где-то при обращении к нему.
...
Рейтинг: 0 / 0
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39766829
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQLite нет типа данных GUID. https://www.sqlite.org/datatype3.html
Скорее всего хранится как текст. Возможно C# какие-то преобразования делает, считая их уместными для типа GUID.

Для начала попробуй выполнить запрос
Код: sql
1.
"SELECT * FROM Settings WHERE Id='6cd48253-1258-42c4-9734-bdd2b2986fe9'


с помощью утилиты sqlite3.exe, если ничего не вернет, то значит такого id нет в таблице.
...
Рейтинг: 0 / 0
SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
    #39798264
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите не затесался ли невидимый символ (например BOM)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]