Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
24.11.2016, 14:54
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Здравствуйте! Когда я пробую запустить простую процедуру с помощью EntityFramework, я получаю следующую ошибку: "FirebirdSql.Data.FirebirdClient.FbException: Dynamic SQL Error SQL error code = -204 Implementation limit exceeded ..." Я предполагаю, что проблема в неправильной генерации SQL-выражения Entity Framework'ом. Текст процедуры (Firebrd) : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Текст процедуры (то, что сгенерировал Entity Framework) : Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Например, почему-то: INDTYPE varchar( 50 ) -> CAST(@INDTYPE AS VARCHAR( 8191 )) ?????? Я использую следующие версии: Visual Studio 2013 Firebird 2.5 (Win32) EntityFramework 6.1.3 FirebirdClient, DDEX-provider - 5.6.0 Подскажите пожалуйста, в чём может быть причина такого преобразования, можно ли это как-либо настроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 14:57
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Hello, Vrastrigin! You wrote on 24 ноября 2016 г. 14:56:46: Vrastrigin> Я использую следующие версии: > # Visual Studio 2013 > # Firebird 2.5 (Win32) > # EntityFramework 6.1.3 > # FirebirdClient, DDEX-provider - 5.6.0а почему? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 15:04
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastriginCAST(@IDUSER AS INT) это не Firebird. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 15:06
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastrigin, У автора провайдера спроси. Если я правильно понял процедура добавляет новую запись. Какого хрена ты тогда её через SELECT вызываешь? З.Ы. Сгенерированный запрос отстой. Неужели внутренний генератор запросов настолько туп, что ему надо каждому параметру преобразование типа делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 15:08
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
kdv, в .NET это нормальное обозначение параметра. В Firebird вне PSQL/EXECUTE STATEMENT именованных параметров нет. Так что драйвер в праве использовать любой понравившийся ему префикс для параметров. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 15:26
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Мимопроходящий, Существующий рабочий проект использует Firebird 2.5, необходимо использовать .NET-ORM для работы с данными, хранящимися в БД - EntityFramework. Для его работы в VS нужно установить клиент и провайдер. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 15:31
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Hello, Vrastrigin! You wrote on 24 ноября 2016 г. 15:30:39: Vrastrigin> необходимо использовать .NET-ORM для работы с даннымипочему? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 16:01
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
kdvvrastriginCAST(@IDUSER AS INT) это не Firebird. Спасибо за ответ! Раз проблема не в Firebird, попробую обратиться в ветку по EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 17:44
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastrigin, я имел в виду, что сгенерированный SQL не для Firebird, а для MS SQL или чего-то другого. У Firebird переменные или параметры предваряются не символом @, а символом :. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 17:52
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
kdv, на сервер всё равно уйдут вопросительные знаки "?" вместо именованных параметров. Так что драйверу всё равно какой разделитель использовать, это его личное дело. Так что с этим там всё нормально. Неясно на кой там преобразование типа для каждого параметра, да ещё и к максимальной для UTF8 длине строки. Селективная процедура с таким набором параметров выглядит подозрительно, так что могу предположить, что эта процедура делает добавление записи. Тогда не понятно почему она вызывается с помощью SELECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.11.2016, 19:00
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
8 * 8191 = приплыли по длине сообщения в 64КБ. Нафига там все эти касты... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2016, 09:06
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
dimitr8 * 8191 = приплыли по длине сообщения в 64КБ. Нафига там все эти касты...Разве не 4 * 8191 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2016, 09:09
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
rdb_dev, посчитай сколько раз в этом кривом запросе используется число 8191 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2016, 09:11
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Симонов Денис, аааа... В этом смысле. Понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2016, 11:34
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Симонов Денисkdv, на сервер всё равно уйдут вопросительные знаки "?" вместо именованных параметров. Так что драйверу всё равно какой разделитель использовать, это его личное дело. Так что с этим там всё нормально. Неясно на кой там преобразование типа для каждого параметра, да ещё и к максимальной для UTF8 длине строки. Селективная процедура с таким набором параметров выглядит подозрительно, так что могу предположить, что эта процедура делает добавление записи. Тогда не понятно почему она вызывается с помощью SELECT. Процедура более сложная и делает не только добавление записи - и Insert и Update и Select и вызов других процедур внутри; а Select - был сгенерирован EntityFramework'ом: После добавления процедуры в .edmx-модель БД вызов процедуры в коде выглядит следующим образом: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Селективное выражение является результатом вызова этого метода. Да, я тоже не могу понять, почему EntityFramework генерирует выражение, которое содержит параметры, размеры которых не соответствуют указанным в процедуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.12.2016, 14:22
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
Если в IBExpert'e запустить сгенерированную процедуру, но при этом уменьшить размер хотя бы одного varchar'а: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
То вместо ошибки: Код: sql 1. 2. 3. 4. 5.
Она выполнится успешно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.12.2016, 14:25
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastrigin, ясен пень. До 3.0 суммарный размер всех параметров не должен превышать 64 Кбайт. Ищи почему у тебя CAST к VARCHAR(8191) идёт. Не должно быть такого каста. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.12.2016, 14:26
|
|||
---|---|---|---|
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastrigin, вам dimitr написал об этом еще неделю назад 19931307 . ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.12.2016, 14:33
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.12.2016, 10:44
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
rdb_dev, Симонов Денис, По ошибке "-204 Implementation limit exceeded" на трекере много тем, последняя - вот эта DNET-723 . Была рекомендация - взять исходный код .Net-Провайдера и урезать максимальный размер varchar вот здесь: Код: c# 1.
Но это очень топорный хак. Также я вчера разобрался, как можно избавиться от CAST'ов во входных параметрах процедур: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
В результате генерируется процедура: Код: sql 1. 2. 3. 4.
Теперь входные параметры хранимых процедур всегда передаются "как есть". Существует ли ситуация, при которой необходимо делать им CAST принудительно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.12.2016, 10:50
|
|||
---|---|---|---|
|
|||
Неправильно генерируется SQL-выражение для хранимой процедуры |
|||
#18+
vrastrigin Существует ли ситуация, при которой необходимо делать им CAST принудительно? существует но довольно редко, когда невозможно вывести типа параметра, например Код: sql 1. 2. 3.
здесь нельзя заранее сказать какого типа параметр id, поэтому надо делать подсказки, например с помощью CAST Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=40&mobile=1&tid=1561819]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 161ms |
0 / 0 |