SQL Server 2008和C#从外部分页存储过程
我有+100个存储过程(很多报告),没有任何分页技术,我读了很多关于如何做的文章,但你们所有人都建议添加SQL Server 2008和C#从外部分页存储过程,c#,sql-server-2008,stored-procedures,pagination,C#,Sql Server 2008,Stored Procedures,Pagination,我有+100个存储过程(很多报告),没有任何分页技术,我读了很多关于如何做的文章,但你们所有人都建议添加@Page-@PageSize参数和CTE ROW_NUMBER()方法 比如: 但是是否存在一种全局分页所有存储过程的方法?为了避免逐个修改,可能在我的C#数据访问代码上: public static DataTable getData(string sql) { string dbconnstr = System.Web.Configuration.WebC
@Page-@PageSize
参数和CTE ROW_NUMBER()
方法
比如:
但是是否存在一种全局分页所有存储过程的方法?为了避免逐个修改,可能在我的C#数据访问代码上:
public static DataTable getData(string sql)
{
string dbconnstr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
DataTable t = new DataTable();
using (SqlConnection c = new SqlConnection(dbconnstr))
{
c.Open();
using (SqlDataAdapter a = new SqlDataAdapter(sql, c))
{
try
{
a.Fill(t);
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
finally
{
c.Close();
}
}
}
return t;
}
//Calling example
DataTable info = dbAccess.getData(String.Format("EXEC reportExample {0}, '{1}'", IdExample, anotherData));
谢谢大家! 当您将业务层逻辑放入数据层时,这个问题很典型。您是否建议不要使用存储过程?因为您希望在服务器上进行分页,所以为了获得好处,这意味着您必须在存储过程中进行分页,因此,在需要使用分页的地方,实际上没有办法修改每个存储过程。唯一的替代方法是使用不同的方法,例如使用实体框架和LINQ,而不是“原始”ADO.NET和存储过程。谢谢,我对所有业务逻辑使用LINQ,但对报表不使用,因为报表(联接、子查询、分组方式等)的SQL复杂性导致我很难处理和维护LINQ。也许使用一个对真实SP的结果集进行分页的SP?如果我使用表值函数而不是SP,也许可以实现这种方法?对不起,另一方面,如果可能的话,我更喜欢将分页代码分离以使其更干净。当然,如果不可能,就不可能:)
public static DataTable getData(string sql)
{
string dbconnstr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
DataTable t = new DataTable();
using (SqlConnection c = new SqlConnection(dbconnstr))
{
c.Open();
using (SqlDataAdapter a = new SqlDataAdapter(sql, c))
{
try
{
a.Fill(t);
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
finally
{
c.Close();
}
}
}
return t;
}
//Calling example
DataTable info = dbAccess.getData(String.Format("EXEC reportExample {0}, '{1}'", IdExample, anotherData));