asp.net MVC 使用动态sql存储过程,填充数据后无法获取列

Bouquet666 2019-05-02 06:09:13
--分页查询
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)。
存储过程没错,我在编辑器里测试了,现在就是如何调用存储过程才是读出完整的列?
...全文
204 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
EdsionWang 2019-05-06
  • 打赏
  • 举报
回复
传参的时候filter的内容不需要加单引号了
Bouquet666 2019-05-05
  • 打赏
  • 举报
回复
对,数据库里有5条数据,dt输出了5条列名,而不是数据。这里的top 指定的查询条数,可以是5条数据,10条数据,而where 可以是多个或者干脆1=1(无条件)
秋的红果实 2019-05-03
  • 打赏
  • 举报
回复
是数据库里有5条吧,dt的话,都可以输出的 检查 SELECT TOP ' + CONVERT(VARCHAR(3),@pagesize) + ' ',既然是top,你指定的是不是一条 where条件,是不是符合条件的只有一条

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧