Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
 SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
AlexV1
Member

Откуда: Новосибирск
Сообщений: 589
Добрый день!

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

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

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

CREATE TABLE Settings (Id GUID PRIMARY KEY, Name TEXT NOT NULL UNIQUE, Value TEXT NOT NULL)

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

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

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 не нашел.
30 янв 19, 06:18    [21797396]     Ответить | Цитировать Сообщить модератору
 Re: SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
AlexV1
Member

Откуда: Новосибирск
Сообщений: 589
Если тупо выкинуть из строки тире
SELECT * FROM Settings WHERE Id=X'6cd48253125842c49734bdd2b2986fe9'

то ошибку не выдает, но и не находит запись
30 янв 19, 06:31    [21797397]     Ответить | Цитировать Сообщить модератору
 Re: SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
Соискатель С++
Member

Откуда:
Сообщений: 29
AlexV1,

Плохая идея писать значение параметров в тело скрипта. Пользуйтесь параметрами, и проблем с кавычками точно не будет.
30 янв 19, 07:59    [21797405]     Ответить | Цитировать Сообщить модератору
 Re: SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
Dima T
Member

Откуда:
Сообщений: 13672
В sqlite3.exe все работает
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';

Результат
6cd48253-1258-42c4-9734-bdd2b2986fe9|nnn|vvv

Проблема явно не в SQLite, а где-то при обращении к нему.
30 янв 19, 08:01    [21797407]     Ответить | Цитировать Сообщить модератору
 Re: SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
Dima T
Member

Откуда:
Сообщений: 13672
В SQLite нет типа данных GUID. https://www.sqlite.org/datatype3.html
Скорее всего хранится как текст. Возможно C# какие-то преобразования делает, считая их уместными для типа GUID.

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

с помощью утилиты sqlite3.exe, если ничего не вернет, то значит такого id нет в таблице.
30 янв 19, 08:13    [21797415]     Ответить | Цитировать Сообщить модератору
 Re: SELECT к SQLite по Id типа GUID не находит запись. В чем подвох?  [new]
unregestered
Member

Откуда:
Сообщений: 392
Посмотрите не затесался ли невидимый символ (например BOM)
8 апр 19, 16:28    [21856173]     Ответить | Цитировать Сообщить модератору
Все форумы / SQLite Ответить