Лучший способ хранить SQL в переменных

В настоящее время я помещаю свой запрос в переменную, подобную этой.

query = @"  select top 1
                u.UserID
            from
                dbo.Users u
            where
                u.SystemUser = 1
                and u.Status = @Status";

Проблема в том, что отступы теряются при переходе на новую строку, и я должен добавить их сам.

Кто-нибудь знает лучший способ? Я знаю, что хранимые процедуры возможны (устраняя эту проблему с отступами), но я не уверен, что они обязательно лучше для чистого извлечения данных.

5 ответов

Решение

Игнорировать ненавистников TSQL; нет ничего плохого в знании TSQL! В любом случае, я хотел бы подойти к этому (если я сохраню ваше форматирование, что не является моей нормой - но... ме);

                // your existing code at, say, this level
                var query = @"
select top 1
      u.UserID
from
      dbo.Users u
where
      u.SystemUser = 1
      and u.Status = @Status";

                // some more code at, say, this level

Если оставить TSQL слева, любые отступы и т. Д. Проще сделать в IDE, но это также делает ваш TSQL короче, и его легче отлаживать при просмотре трассировки, так как он не является причудливыми символами в 30 с чем-то Начиная с новой строки перед select также помогает держать вещи в порядке.

Лично я также нахожу, что несоответствие между отступом кода и отступом TSQL помогает найти TSQL - и TSQL для меня очень важен, так что это хорошая вещь. И подчеркивая, что мы только что поменяли "мир" (из-за отсутствия лучшего термина), это тоже не вредно.

Вы должны хотя бы рассмотреть возможность использования LINQ. У него есть кривая обучения, но он даст вам преимущество синтаксиса запроса, проверяемого компилятором.

Вы не говорите, является ли это веб-приложением или нет, но если вы получаете какие-либо входные данные для своего запроса из пользовательского ввода (скажем, из веб-адреса или опубликованных данных из браузера), вставляя пользовательский ввод в строку перед отправкой в механизм запросов также рискует атакой SQL-инъекций больше, чем другими методами выполнения запроса.

Использование Entity Framework - еще один отличный подход. Недавно я использовал метод Code First, и он очень элегантный. Наконец, хранимая процедура также является хорошим методом.

Прежде всего, форматирование вашего SQL важно, только если люди увидят его.

Если вы действительно хотите сохранить отступ, вы можете поместить строку в ресурс (используйте SHIFT+ENTER в редакторе ресурсов, чтобы вставить новые строки). Благодаря магии Visual Studio доступ к ресурсам прост (Properties.Resources.*).

Если вы используете WPF, вы также можете поиграть с ресурсами XAML.

Вы всегда можете сделать это:

query = " select top 1"
      + "     u.UserID"
      + " from"
      + "     dbo.Users u"
      + " where"
      + "     u.SystemUser = 1"
      + "     and u.Status = @Status";

По крайней мере, таким образом, ваша IDE будет отступать строку, а не SQL. Если вы идете по этому пути, вы должны быть осторожны, чтобы добавить пробел в каждой строке.

Лучше было бы пойти с LINQ:

result = (from
             u in dbo.Users
         select
             u.userId
         where
             u.SystemUser == 1 &&
             u.Status = @Status
).Take(1)

Или вы можете использовать разные способы, чтобы получить pure data
вы можете использовать

stored procedues
LINQ 2 SQL
Entity Framework
ADO.NET

жестко запрограммированный синтаксис sql - не самая лучшая практика.

Другие вопросы по тегам