以下のクエリを作成しました。実行すると動作します。
string sortDir = (this.GridSortDirection == SortDirection.Descending ? " DESC" : " ASC");
int startIndex = 1;
int endIndex = this.gvData.PageSize;
SELECT RowNum, [ID], [Name], [Description], [DisplayIndex], [Status]
FROM
(
SELECT [ID], [Name], [Description], [DisplayIndex], CASE WHEN Status = 1 THEN 'Active' ELSE 'Disabled' END AS [Status] ,
ROW_NUMBER() OVER(ORDER BY [" + this.GridSortExpression + "]" + " " + sortDir + @")as 'RowNum'
FROM [MyDatabase].[dbo].[t_MyTable] s
) as Info
WHERE RowNum BETWEEN " + startIndex.ToString() + " AND " + endIndex.ToString()
以下に示すように、パラメーター化されたクエリ形式に再構築しようとしましたが、実行時にエラーが発生します。エラーは、sortDirの近くに構文エラーがあることを示しています。
string sql = @"SELECT RowNum, [ID], [Name], [Description], [DisplayIndex], [Status]
FROM
(
SELECT [ID], [Name], [Description], [DisplayIndex], CASE WHEN Status = 1 THEN 'Active' ELSE 'Disabled' END AS [Status] ,
ROW_NUMBER() OVER(ORDER BY @SortExpression @SortDir)as 'RowNum'
FROM [MyDatabase].[dbo].[t_MyTable] s
) as Info
WHERE RowNum BETWEEN @startIndex AND @endIndex";
cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@SortExpression", this.GridSortExpression);
cmd.Parameters.AddWithValue("@SortDir", sortDir);
cmd.Parameters.AddWithValue("@startIndex", startIndex);
cmd.Parameters.AddWithValue("@endIndex", endIndex);
da = new SqlDataAdapter(cmd);
da.Fill(dt);
私も無駄に次のことを試みました...同じエラーメッセージ
cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@SortExpression", this.GridSortExpression + " " + sortDir);
cmd.Parameters.AddWithValue("@startIndex", startIndex);
cmd.Parameters.AddWithValue("@endIndex", endIndex);
da = new SqlDataAdapter(cmd);
da.Fill(dt);
誰かが私のエラーを教えてもらえますか?
よろしくお願いします