Лучший способ хранить SQL в переменных - PullRequest
3 голосов
/ 04 августа 2011

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

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

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

Ответы [ 5 ]

6 голосов
/ 04 августа 2011

Игнорировать ненавистников 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 очень важен для меня, так что это хорошая вещь .И подчеркивая, что мы только что изменили «мир» (из-за отсутствия лучшего термина), это тоже не вредно.

3 голосов
/ 04 августа 2011

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

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

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

1 голос
/ 04 августа 2011

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

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

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

1 голос
/ 04 августа 2011

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

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)
0 голосов
/ 04 августа 2011

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

stored procedues<br> LINQ 2 SQL<br> Entity Framework<br> ADO.NET

синтаксис sql в жестком коде - не лучшая практика

...