2009-12-03 80 views
0

我不确定我的SQL代码和练习在这里是否有用,所以希望有人能够启发我。为了尝试将我的DAL从业务层中分离出来,我没有在页面上使用SQLDataSource。相反,我创建了一个gridview来显示结果并调用一个SQL命令来检索结果。我有以下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语句在每个字段周围都有方括号,但是当我尝试将它放在字段中时,不会显示任何结果。 我也试图将名字和姓氏合并到一列中,并在它们之间留有空格,但上面没有在它们之间放置空格,并且我似乎无法在SQL语句中添加空格。

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

感谢您的任何帮助。

+0

哪里是ProductDetail.Price来自哪里? – WesleyJohnson 2009-12-03 00:36:53

+0

对不起,这是来自旧文件。我已经修复了代码。 – keyboardP 2009-12-03 01:00:08

回答

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或实体框架)。然后,您可以将一组对象绑定到您的GridView。

1

试试这个:

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

最良好的祝愿, 费边

2

很长一段时间没有SQL的用法,但我没有看到你的查询有问题,只要数据库设计的好。连接两个字符串列使用类似这样的:

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

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

至于安全问题:所有其他人可以看到的是一个渲染的网页。如果你不在连接字符串中显示,也不在提交的HTML/JS代码中查询(如评论等),你不应该担心。只要服务器是安全的,存储在web.config中的连接字符串和服务器代码中的查询中可见的数据库结构都是安全的。