2009-12-03 79 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中的連接字符串和服務器代碼中的查詢中可見的數據庫結構都是安全的。