Здравствуйте, elcolex, Вы писали:
E>И использую я переменные (значения приходят с формы ввода): в linq2db есть такой способ прикольный — db.Value().Value().Value().InsertWithIdentity(). Это чтобы не все поля таблицы инсертить.
Есть разница как использовать
db.Persons.Value(p => p.Name, () => name).Insert();
db.Persons.Value(p => p.Name, name).Insert();
E>Но я не совсем понял, а для чего такие сложности? Константы это или не константы. Всегда использовать бинд-переменные да и не волноваться — а правильно ли мы заэскейпили?
Это зависит от многих факторов, в том числе и от используемой БД и от его версии. Где-то константы могут приводить к перекомпиляции запроса и переполнении планов, но в то же время план запроса будет построен под конкретные значения, в отличие от.
Соответственно, библиотека не навязывает свой способ работы с используемой БД и не сужает выбор до "единственно правильного", а дает возможность использовать разные стратегии для разных случаев с максимальной эффективностью. И я считаю, это правильно.
E>Вот, реальный пример: в поле ввода введено значение (без ковычек) "---юЩУЯ----"
E>И у меня при инсерте выдаёт оракловую ошибку "ORA-01008 not all variables bound". И я не понимаю что произошло. Т.е. это значение не вставилось в таблицу.
Не понимаешь, но виновата библиотека?
E>И потом не объяснишь разработчику, что вот этот InsertWithIdentity не используй, потому что он не совсем безопасный, а вот этот используй.
Нет такого, Insert и InsertWithIdentity работают совершенно одинаково.
E>Эх, такая классная библиотека. Это ж надо...
Предлагаю разобраться, а не кидаться эээ беспочвенными обвинениями

... << RSDN@Home 1.0.0 alpha 5 rev. 0>>