目前我将查询放在这样的变量中。
query = @" select top 1
u.UserID
from
dbo.Users u
where
u.SystemUser = 1
and u.Status = @Status";
这个问题是当换到新行时缩进会丢失,我必须自己添加。
有谁知道更好的方法?我知道存储过程是可能的(消除这种缩进问题),但我不确定它们是否对于纯数据检索更好。
答案 0 :(得分:6)
忽略TSQL仇恨者;了解一些TSQL并没有什么本质上的错误!无论如何,我会接近这个(如果我保留你的格式,这不是我的常态 - 但是...... meh);
// 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对我来说非常重要,所以这是好东西。并且强调我们刚刚改变“世界”(因为缺少一个更好的术语)也没有害处。
答案 1 :(得分:3)
您至少应该考虑使用LINQ。它确实有学习曲线,但它会为您提供编译器检查查询语法的优势。
您没有说这是否是一个Web应用程序,但是如果您从用户输入(例如从Web URL或从浏览器发布的数据)获得对查询的任何输入,则将用户输入嵌入到字符串中在发送到查询引擎之前,与其他执行查询的方法相比,SQL注入攻击的风险更大。
使用Entity Framework是另一种出色的方法。我最近使用了Code First方法,非常优雅。最后,存储过程也是一种很好的方法。
答案 2 :(得分:1)
您可以随时执行此操作:
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)
答案 3 :(得分:1)
首先,只有人类能够看到它时,SQL的格式才是重要的。
如果确实想要保留缩进,可以将字符串放在资源中(在资源编辑器中使用SHIFT + ENTER插入新行)。感谢Visual Studio魔术,访问资源很容易(Properties.Resources。*)。
如果您使用的是WPF,您还可以使用XAML资源。
答案 4 :(得分:0)
或者您可以使用不同的方式来获取pure data
你可以用
stored procedues
LINQ 2 SQL
Entity Framework
ADO.NET
硬编码的sql语法不是最佳实践。