SQL语句合并/简化

时间:2009-12-03 00:26:29

标签: asp.net sql sql-server security

我不确定我的SQL代码和练习是否有用,所以希望有人可以启发我。为了尝试将DAL与Business层分开,我没有在页面上使用SQLDataSource。相反,我创建了一个gridview来显示结果,并调用一个SQL命令来检索结果。我有以下SQL命令:

string CommandText = "SELECT User.FName + User.Surname, Product.Name, Product.Quantity, Product.Price FROM User, Products WHERE Product.UserID = User.UserID";

然后将结果加载到datareader并绑定到gridview控件。这很好用。但是,SQL语句效率低下吗?我注意到一些SQL语句在每个字段周围都有方括号,但是当我尝试将它放在我的字段周围时,没有显示任何结果。 我也试图将firstname和surname合并到一个列中,它们之间有空格,但上面没有在它们之间放置空格,我似乎无法在SQL语句中添加空格。

最后,这一切都发生在购物车页面的代码隐藏中。但是,在代码隐藏中使用连接字符串和上面的SQL语句是不安全的吗?我的connectionstring在web.config文件中加密,并通过Configuration API调用。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

首先,在大多数情况下,使用方括号是可选的(IIRC,实际需要的实例很少,例如在语句中使用关键字)。方括号围绕每个标识符,例如

SELECT [Server_Name].[Database_Name].[Table_Name].[Field_Name], ...

其次,要添加空格,您可以使用SELECT User.FName + ' ' + User.Surname。您也可能想要别名 - SELECT User.FName + ' ' + User.Surname AS [name]

第三,将连接字符串保留在web.config中,并使用密钥对其进行加密。

最后,您可能需要考虑在项目中引入一个可以从数据源返回对象的数据访问层(可能值得查看NHibernate,LINQ to SQL或Entity Framework)。然后,您可以将对象集合绑定到GridView。

答案 1 :(得分:2)

很长时间没有SQL使用,但我没有看到您的查询有问题,只要数据库设计得很好。要连接两个字符串列,请使用以下内容:

User.FName + ' ' + User.Surname AS UserName

只需在两个字符串之间添加一个空格。

至于安全问题:所有其他人都可以看到是一个呈现的网页。如果您没有在呈现的HTML / JS代码中公开连接字符串或查询(如注释等),您不必担心。只要服务器是安全的,存储在web.config中的连接字符串和服务器代码中的查询中可见的数据库结构都是安全的。

答案 2 :(得分:1)

试试这个:

string CommandText = "SELECT 
    User.FName + ' ' + User.Surname AS Fullname, 
    Product.Name, 
    Product.Quantity, 
    ProductDetail.Price 
  FROM 
    User, Products 
  WHERE 
    Product.UserID = User.UserID";

祝福, 费边