Лучший способ хранить 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 - не самая лучшая практика.