2011-06-16 66 views
1

我使用這個查詢分頁參數化查詢ado.net問題

string selectStatement = "SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY @sortMember @sortDirection) AS RowNum, * FROM School) AS Rows WHERE RowNum > @pageFrom AND RowNum < @pageTo "; 

command.Parameters.Add("@sortDirection", System.Data.SqlDbType.NVarChar, 50); 
command.Parameters["@sortDirection"].Value = cmd.SortDescriptors.Count == 0 ? "" : cmd.SortDescriptors[0].SortDirection == System.ComponentModel.ListSortDirection.Ascending ? "" : "DESC"; 

如果sortDirection是「」我得到一個異常。 如果你這樣使用它,它工作正常,但我想讓它參數化查詢。解決辦法是什麼?

string selectStatement = string.Format("SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY @sortMember {0}) AS RowNum, * FROM School) AS Rows WHERE RowNum > @pageFrom AND RowNum < @pageTo ",System.ComponentModel.ListSortDirection.Ascending ? "" : "DESC); 

我得到的異常是:'@sortDirection'附近的語法不正確。

+0

什麼例外? – gbn 2011-06-16 17:34:41

+0

檢查@sortDirection是否有效,或者給它一個默認值? – 2011-06-16 17:38:10

回答

5

你不能參數化之類的表名,列順序逐個等,他們查詢。您需要將期望值白名單(以避免SQL注入)並將其直接連接到查詢中(這正是您的string.Format的用法)。

此刻,order-by是變量的值,它不會每行更改。基本上,排序(如書面)被忽略。

0

這不是參數的工作原理。您必須動態構建查詢的字符串。