asp.net MVC 使用动态sql存储过程,填充数据后无法获取列
--分页查询
ALTER PROC [dbo].[usp_GetPage]
@pagesize int = 10, --每页显示多少条记录
@pageindex int = 1, --当前页的索引,第一页从1开始
@filter varchar(100), --需要查询出来的列名,多个列使用,隔开
@tablename varchar(100), --查询的表名
@id varchar(100), --需要排序的字段名
@condition varchar(100) --查询的条件
as
declare @sql varchar(2000)
set @sql = 'SELECT TOP ' + CONVERT(VARCHAR(3),@pagesize) + ' '+@filter+' FROM ' + @tablename
+ ' WHERE '+@id+' not in(SELECT TOP '+Convert(varchar(3), ((@pageindex - 1) * @pagesize))
+' '+@id+' FROM ' +@tablename+ ' WHERE 1=1 and '+@condition+' ORDER BY '+@id+') '
+ 'AND ' + @condition + ' ORDER BY ' + @id
print @sql
exec (@sql)
以上是sql存储过程。在sql Server数据库里能查出数据。
string sql = "exec usp_GetPage @pageSize,@currPageIndex,@filter,@tableName,@sortField,@condition;";
SqlParameter[] sp = new SqlParameter[] { new SqlParameter("@PageSize", pageSize), new SqlParameter("@currPageIndex", currPageIndex), new SqlParameter("@filter", filter), new SqlParameter("@tableName", tableName), new SqlParameter("@sortField", sortField), new SqlParameter("@condition", condition) };
string sqlb = string.Format("SELECT COUNT(0) FROM {0} ", tableName);
int count = Convert.ToInt32(ExecuteScalar(sqlb));
if (count % pageSize != 0)
{
pageCount = count / pageSize + 1;
}
else
{
pageCount = count / pageSize;
}
return GetTable(sql, sp);
以上是数据访问部分代码
DataTable dt = SqlHelper.GetPages(pageSize, currPageIndex, "'Id,OrderID,BookID,Quantity,UnitPrice'", "OrderBook", "Id", "1=1", ref pageCount);
foreach (DataRow sdr in dt.Rows)
{
OrderBook orderBook = new OrderBook();
orderBook.Id = Convert.ToInt32(sdr["Id"]);
orderBook.OrderID = Convert.ToInt32(sdr["OrderID"]);
bookId = Convert.ToInt32(sdr["BookID"]);
orderBook.Book = BookService.GetBookById(bookId);
orderBook.Quantity = Convert.ToInt32(sdr["Quantity"]);
orderBook.UnitPrice = Convert.ToDecimal(sdr["UnitPrice"]);
list.Add(orderBook);
}
以上的sdr调试时显示只有一条数据(Id,OrderID,BookID,Quantity,UnitPrice),但是dt中有5条。
正确的方法是:sdr中显示的OrderBook中的列,dt中有5行数据。
但现在sdr中的列只有一个,并且值是(Id,OrderID,BookID,Quantity,UnitPrice)。
存储过程没错,我在编辑器里测试了,现在就是如何调用存储过程才是读出完整的列?