Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: pkochubey https://pklab.ru
Дата: 18.04.17 07:30
Оценка: 9 (1)
Не поймите меня не правильно, я люблю ORM'ы. Но случаются моменты когда приходится "деградировать" в использовании ORM, к примеру когда нужно использовать функции базы данных которые не поддерживаются в вашей ORM или просто хотите убрать дополнительные накладные расходы в запросах.

Использование сырых SQL запросов в управляемом коде, выглядит не так красиво\удобно как могло быть, но если гнаться не за красотой а за скоростью исполнения запросов то использование самописных запросов дает полный контроль над ситуацией (сейчас, наверное, большинство пишет сырые запросы хуже чем это делает тот же Entity, спасибо linq за это). Основная проблема с быстро растущей схемой базы данных, это ее изменения, стоит переименовать столбец в базе, как у тебя падает выполнения кода в рантайме если этот кусок еще не был покрыт тестами. Мне прилично надоела подобная ситуация а с Dapper я расставаться не хотел. Порылся в каталоге расширений Visual Studio, взгрустнул и решил запилить свое.

Ссылка на расширение https://marketplace.visualstudio.com/items?itemName=PKochubey.VerifyRawSQL поддерживаются VS 15, 17. О любых багах пишите на GitHub https://github.com/pkochubey/VerifyRawSql. За время использования плагин не подвел, сильно выручает к концу рабочего дня когда концентрация падает и количество опечаток растет.
c# sql visual studio
Re: Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: Kolesiki  
Дата: 18.04.17 11:21
Оценка:
Общую идею я понял, я не понял, как ты собираешься проверять то, что едва ли поддаётся анализу??

var sql = "SELECT Name FROM " + (IsHuman ? "Human" : "Animal");


Кто, когда и как будет проверять валидность Name??
Re[2]: Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: pkochubey https://pklab.ru
Дата: 18.04.17 14:11
Оценка:
K>
K>var sql = "SELECT Name FROM " + (IsHuman ? "Human" : "Animal");
K>


K>Кто, когда и как будет проверять валидность Name??


Спасибо за кейс, такого я у себя в десятилетнем легаси проекте не встречал, наверное у меня просто все более примитивное. В принципе эту строку можно провалидировать, поковыряв парсер Roslyn можно вытянуть обе ветки и для каждой построить свой запрос.

Плагин можно дорабатывать постоянно, конечно можно настройки выставить так, что будет много ложных срабатываний, но в целом пользы больше чем вреда.
Re[3]: Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: Mystic Artifact  
Дата: 22.04.17 14:12
Оценка:
Здравствуйте, pkochubey, Вы писали:

P>Спасибо за кейс, такого я у себя в десятилетнем легаси проекте не встречал, наверное у меня просто все более примитивное.

Не лучше ли отдать это на откуп хранимым процедурам? Если речь о mssql — то и скрипты загнать в database project — лишним не будет. И будет проверка схемы компилятором.
Re: Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: Kolesiki  
Дата: 27.04.17 10:27
Оценка: +1
Я боюсь, что данный проект по сложности — примерно как ИИ для шахмат, где ты смог пока только реализовать "ход лошадью на свободное место". Т.е. то, что НЕ сделано — адова тьма работы по ср. с тем, что работает. Я не вижу особого смысла в таком плагине, разве что он помогает в твоих конкретных проектах.

Даже вот такая мысль навскидку: есть селект и куча джойнов. А и ещё в довесок UNIONs! Даже если допустить, что подобные операторы полностью собраны в константную строку (а это далеко не всегда так), тебе понадобится полноценный парсер SQL(!!), чтобы мало-мальски корректно валидэйтить поля.

Если имена таблиц не собираются из букв то вполне можно обойтись поиском по проекту с указанием таблицы, а далее ручной правкой строк. Поиск, разумеется, интеллектуальный — только внутри строк (чего M$ не додумается сделать ещё 20 лет).
Re: Плагин для Visual Studio для проверки сырых SQL запросов в C# коде
От: vaskir Россия vaskir.blogspot.com
Дата: 01.05.17 19:02
Оценка:
http://fsprojects.github.io/FSharp.Data.SqlClient/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.