怎么给table分页?c#语言,不要用控件,要Ajax的,数据库sql的。
连接数据库的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace LibraryDB
{
class DBConnection
{
internal SqlConnection Connection()
{
string connectionString = "连接数据库的信息";
SqlConnection connection= new SqlConnection(connectionString);
connection.Open();
return connection;
}
}
}
建表类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace LibraryDB
{
class CreatTable
{
DBConnection dbConnection = new DBConnection();
internal void creatTable()
{
using (dbConnection.Connection())
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = dbConnection.Connection();
try
{
cmd.CommandText = "create table Library (ID int not null, bookname varchar(100), picture image, ISBN nvarchar(100), publicationdate datetime, price varchar(100), author varchar(100), abstract varchar(100))";
cmd.ExecuteNonQuery();
Console.WriteLine("Library创建成功!");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
}
sqlsever类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace LibraryDB
{
class SQLServe
{
DBConnection dbConnection = new DBConnection();
internal void Serve(string sqlString)
{
using (dbConnection.Connection())
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = dbConnection.Connection();
cmd.CommandText = sqlString;
cmd.ExecuteNonQuery();
}
}
}
}
主函数类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LibraryDB
{
class Program
{
static void Main(string[] args)
{
string sqlString = null;
CreatTable creatTable = new CreatTable();
creatTable.creatTable();
SQLServe sqlServe = new SQLServe();
Console.WriteLine("是否需要查看输入语法规则?y/n");
string n = Console.ReadLine();
switch (n)
{
case "y":
Console.WriteLine("例如:
查找:select bookname,ISBN from Library where 条件表达式");
Console.WriteLine("删除:delete from Library where 条件表达式");
Console.WriteLine("增加:insert into Library(字段1,字段2,字段3...) values (值1,值2,值3...):字符串,汉字加单引号");
Console.WriteLine("修改:update Library set 字段1=值1,字段2=值2,字段3=值3... where 条件表达式");
break;
case "n": break;
default:Console.WriteLine("还是按n比较好。"); break;
}
while (true)
{
Console.WriteLine("请输入SQL语句执行相应的操作,想退出程序,请按2:");
sqlString = Console.ReadLine();
sqlServe.Serve(sqlString);
switch (sqlString[0])
{
case 'd': Console.WriteLine("删除成功!"); break;
case 'i': Console.WriteLine("添加成功!"); break;
case 'u': Console.WriteLine("更新成功!"); break;
case 's': Console.WriteLine("查找成功!"); break;
default: Console.WriteLine("请仔细核对后重新输入!"); break;
}
}
// Console.ReadKey();
}
}
}
关键是sql语句的写法,vs中c#的写法其次的
楼上的sql是可以实现的,比全部取出再剔除速度快了很多,但还是可以优化的。比如判断当前页在总页数的前半部分或后半部分、如果id是数字而且按id排序的话就别用not in,直接用大于或小于。
如果是sql 2005以上的话就更容易了。
select * from
(select *, ROW_NUMBER() over(order by ID) as rowNum from 表名 ) as T1
where rowNum between 50 and 60;
另外给一个现成的分页存储过程,你可以参考或直接使用:
Create PROC [dbo].[P_GetPage]
@TableName VARCHAR(200), --表名
@FieldList VARCHAR(2000), --显示列名,如果是全部字段则为*
@PrimaryKey VARCHAR(100), --单一主键或唯一值键
@Where VARCHAR(2000), --查询条件 不含'where'字符,如id>10 and len(userid)>9
@Order VARCHAR(1000), --排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc
--注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷
@SortType INT, --排序规则 1:正序asc 2:倒序desc 3:多列排序方法
@RecorderCount INT, --记录总数 0:会返回总记录
@PageSize INT, --每页输出的记录数
@PageIndex INT, --当前页数
@TotalCount INT OUTPUT, --记返回总记录
@TotalPageCount INT OUTPUT --返回总页数
AS
SET NOCOUNT ON
IF ISNULL(@TotalCount,'') = '' SET @TotalCount = 0
SET @Order = RTRIM(LTRIM(@Order))
SET @PrimaryKey = RTRIM(LTRIM(@PrimaryKey))
SET @FieldList = REPLACE(RTRIM(LTRIM(@FieldList)),' ','')
WHILE CHARINDEX(', ',@Order) > 0 OR CHARINDEX(' ,',@Order) > 0
BEGIN
SET @Order = REPLACE(@Order,', ',',')
SET @Order = REPLACE(@Order,' ,',',')
END
IF ISNULL(@TableName,'') = '' OR ISNULL(@FieldList,'') = ''
OR ISNULL(@PrimaryKey,'') = ''
OR @SortType 3
OR @RecorderCount < 0 OR @PageSize < 0 OR @PageIndex < 0
BEGIN
PRINT('ERR_00')
RETURN
END
IF @SortType = 3
BEGIN
IF (UPPER(RIGHT(@Order,4))!=' ASC' AND UPPER(RIGHT(@Order,5))!=' DESC')
BEGIN PRINT('ERR_02') RETURN END
END
DECLARE @new_where1 VARCHAR(1000)
DECLARE @new_where2 VARCHAR(1000)
DECLARE @new_order1 VARCHAR(1000)
DECLARE @new_order2 VARCHAR(1000)
DECLARE @new_order3 VARCHAR(1000)
DECLARE @Sql VARCHAR(8000)
DECLARE @SqlCount NVARCHAR(4000)
IF ISNULL(@where,'') = ''
BEGIN
SET @new_where1 = ' '
SET @new_where2 = ' WHERE '
END
ELSE
BEGIN
SET @new_where1 = ' WHERE ' + @where
SET @new_where2 = ' WHERE ' + @where + ' AND '
END
IF ISNULL(@order,'') = '' OR @SortType = 1 OR @SortType = 2
BEGIN
IF @SortType = 1
BEGIN
SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' ASC'
SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' DESC'
END
IF @SortType = 2
BEGIN
SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' DESC'
SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' ASC'
END
END
ELSE
BEGIN
SET @new_order1 = ' ORDER BY ' + @Order
END
IF @SortType = 3 AND CHARINDEX(','+@PrimaryKey+' ',','+@Order)>0
BEGIN
SET @new_order1 = ' ORDER BY ' + @Order
SET @new_order2 = @Order + ','
SET @new_order2 = REPLACE(REPLACE(@new_order2,'ASC,','{ASC},'),'DESC,','{DESC},')
SET @new_order2 = REPLACE(REPLACE(@new_order2,'{ASC},','DESC,'),'{DESC},','ASC,')
SET @new_order2 = ' ORDER BY ' + SUBSTRING(@new_order2,1,LEN(@new_order2)-1)
IF @FieldList '*'
BEGIN
SET @new_order3 = REPLACE(REPLACE(@Order + ',','ASC,',','),'DESC,',',')
SET @FieldList = ',' + @FieldList
WHILE CHARINDEX(',',@new_order3)>0
BEGIN
IF CHARINDEX(SUBSTRING(','+@new_order3,1,CHARINDEX(',',@new_order3)),','+@FieldList+',')>0
BEGIN
SET @FieldList =
@FieldList + ',' + SUBSTRING(@new_order3,1,CHARINDEX(',',@new_order3))
END
SET @new_order3 =
SUBSTRING(@new_order3,CHARINDEX(',',@new_order3)+1,LEN(@new_order3))
END
SET @FieldList = SUBSTRING(@FieldList,2,LEN(@FieldList))
END
END
SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'
+ CAST(@PageSize AS VARCHAR)+') FROM ' + @TableName + @new_where1
IF @RecorderCount = 0
BEGIN
EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',
@TotalCount OUTPUT,@TotalPageCount OUTPUT
END
ELSE
BEGIN
SELECT @TotalCount = @RecorderCount
END
IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)
BEGIN
SET @PageIndex = CEILING((@TotalCount+0.0)/@PageSize)
END
IF @PageIndex = 1 OR @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize)
BEGIN
IF @PageIndex = 1 --返回第一页数据
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
+ @TableName + @new_where1 + @new_order1
END
IF @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize) --返回最后一页数据
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
+ 'SELECT TOP ' + STR(ABS(@PageSize*@PageIndex-@TotalCount-@PageSize))
+ ' ' + @FieldList + ' FROM '
+ @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
+ @new_order1
END
END
ELSE
BEGIN
IF @SortType = 1 --仅主键正序排序
BEGIN
IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
+ @TableName + @new_where2 + @PrimaryKey + ' > '
+ '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
+ STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
+ ' FROM ' + @TableName
+ @new_where1 + @new_order1 +' ) AS TMP) '+ @new_order1
END
ELSE --反向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
+ 'SELECT TOP ' + STR(@PageSize) + ' '
+ @FieldList + ' FROM '
+ @TableName + @new_where2 + @PrimaryKey + ' < '
+ '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
+ STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
+ ' FROM ' + @TableName
+ @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
+ ' ) AS TMP ' + @new_order1
END
END
IF @SortType = 2 --仅主键反序排序
BEGIN
IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
+ @TableName + @new_where2 + @PrimaryKey + ' < '
+ '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
+ STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
+' FROM '+ @TableName
+ @new_where1 + @new_order1 + ') AS TMP) '+ @new_order1
END
ELSE --反向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('
+ 'SELECT TOP ' + STR(@PageSize) + ' '
+ @FieldList + ' FROM '
+ @TableName + @new_where2 + @PrimaryKey + ' > '
+ '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
+ STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey
+ ' FROM ' + @TableName
+ @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2
+ ' ) AS TMP ' + @new_order1
END
END
IF @SortType = 3 --多列排序,必须包含主键,且放置最后,否则不处理
BEGIN
IF CHARINDEX(',' + @PrimaryKey + ' ',',' + @Order) = 0
BEGIN PRINT('ERR_02') RETURN END
IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
+ 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
+ ' SELECT TOP ' + STR(@PageSize*@PageIndex) + ' ' + @FieldList
+ ' FROM ' + @TableName + @new_where1 + @new_order1 + ' ) AS TMP '
+ @new_order2 + ' ) AS TMP ' + @new_order1
END
ELSE --反向检索
BEGIN
SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
+ 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '
+ ' SELECT TOP ' + STR(@TotalCount-@PageSize *@PageIndex+@PageSize) + ' ' + @FieldList
+ ' FROM ' + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '
+ @new_order1 + ' ) AS TMP ' + @new_order1
END
END
END
EXEC(@Sql)
分2个步骤:
第一:你需要在数据库中自己写一个分页的SQL 存储过程,返回当前页的数据
第二:你需要在C#调用存储过程返回的数据,给html
以下是我自己写的一段分页内容,你可以借鉴下:
CREATE procedure [dbo].[SP_pagination]
(
@sqlstr nvarchar(4000), --查询字符串 自己拼写的sql语句
@pageindex int,--第N页
@pagesize int--每页行数
)
as
set nocount on
declare
@P1 int, --P1是游标的id
@rowcount int
if(@pageindex<1)
begin
set @pageindex=1
end
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select @rowcount as [Count],ceiling(1.0*@rowcount/@pagesize) as [PageCount],@pageindex as PageIndex
set @pageindex=(@pageindex-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@pageindex,@pagesize
exec sp_cursorclose @P1
传参例如:
@sqlstr select * from A
@pageindex 1
@pagesize 10
取出A表中的第一页内容,每页显示10条数据
你自己通过C#语言,访问这个存储过程
返回的Table有4个
其中下标为1 也就是第二个Table:三个返回列
Count A表中根据查询条件后的总数据
PageCount A表中根据查询条件后的总页数
PageIndex 当前页
下标为2 也就是第三个Table:第1页的数据集
查询出来的内容,类似如下:
希望对你有用
SELECT Top 【每页显示的数量】*
FROM 【表名】
WHERE id NOT IN
(SELECT Top 【每页显示的数量】*【第几页】 id
FROM 【表名】
ORDER BY UnitPrice,【根据那个键排序】)
ORDER BY UnitPrice,【根据那个键排序】
请采纳
用存储过程就可以 分页存储过程 代码很少
1、你要写一个支持分页的SQL语句,需要能根据传入的页数和每页多少行,进行数据的筛选
2、HTML放置hidden控件,用于记录当前是第几页
3、程序或配置中需要有一个参数表示每页显示多少行
4、根据这两个值,就可以得到你需要的第X页的所有数据
5、展示它们
js的分页原理以及实现步骤是什么?
主要是借鉴了网上一个例子,修改了一些小地方,前端分页的技巧,表格的数据是已经写好了,可以前端渲染表格然后再分页,都是可以的。其实分页最关键是这两句:var startRow = (currentPage - 1) * pageSize+1; \/\/currentPage 为当前页,pageSize为每页显示的数据量var endRow = currentPage * ...
Oracle常见SQL分页实现方案
TABLE T WHERE T RID = T ROWID;从语句上看 共有 层Select嵌套查询 最内层为可替换的不分页原始SQL语句 但是他查询的字段只有ROWID 而没有任何待查询的实际表字段 具体查询实际字段值是在最外层实现的 这种方式的原理大致为 首先通过ROWNUM查询到分页之后的 条实际返回记录的ROWID 最后通过ROWID将最终...
求助:页面中的table分页显示
代码如下:<table width="100%" border="0" cellpadding="0" cellspacing="1" class="TableAll"> <tr align="center" class="TrBody"> <td width="9%">序号<\/td> <td width="14%" height="25">用户<\/td> <td width="25%">操作内容<\/td> <td width="21%">操作时间<\/td> <...
sql数据库分页
楼主,刚刚有个问友和你问的差不多,我刚回答了他的。就直接把刚回答的复制给你看看啦。希望对你有帮助、。要想分页,首先得做好准备工作。你要先声明每页显示多少条数据,还得获取当前选择的是多少页的页码。有了这两个分页就好办了。sql如下:select top 10 from tableName where (id not in(...
jQuery,table,josn,动态生成分页
\/\/为分页标签加上链接 ('<a href="#" ><span>'+ (page+1) +'<\/span><\/a>').bind("click", { "newPage": page }, function(event){ currentPage = event.data["newPage"];table.trigger("repaginate");}).appendTo($pager);pager.append("");} pager.insertAfter($table); ...
JTable如何实现分页
JTable就是一个表格,表格的分页是什么意思?--- 还是不清楚,页面指什么?是不是这样,比如说你有50条数据,你的表格只有10行,然后你有两个按钮,分别是向前向后翻页,一开始显示1-10,按一下向后就显示第11到20条数据?如果是这样,那你表格数据保存着,每次按钮都重新设置JTable显示的数据就可...
bootstrapTable翻页(后端分页)数据对不上的问题
bootstrapTable后端分页后前端翻页事件造成的显示数据偶尔不对 程序逻辑是这样的: bootstrapTable列中有这样一列,实现自动排序 分页函数及方法: 后台对数据进行了筛选排序和跳页,翻页的时候,经常会出现展示初始数据的情况,ajax请求的数据好像没有加载一样。 分析了一下可能时这样的: bootstrapTable再翻页时会先触发翻页...
html页面怎么把数据分页显示
数据分页,我以前有用过基于jquery的datatables对table列表进行分页, 效果还挺不错。所以,要看你针对的元素,然后在github上搜索js pagination,会有很多不同用途的项目,选择适合自己的就行。
oracle数据库怎么实现分页,且每页三条数据
您好:oracle查询分页可分为两种情况,一种使用的是rownum ,另外一种则是使用 row_number() over(order by column_name desc)。1.使用rownum分页查询,可用以下方式:select t2.* from (select t1.*,rownum as rn from table_name t1 where 1=1 and rownum <= page * page_size) t2 where ...
如何用sql语句 实现分页查询?
方法1:适用于 SQL Server 2000\/2005 SELECT TOP 页大小 FROM table1 WHERE id NOT IN (SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id )ORDER BY id 方法2:适用于 SQL Server 2000\/2005 SELECT TOP 页大小 FROM table1 WHERE id > (SELECT ISNULL(MAX(id),0)FROM (SELECT ...
饶肃玄麦: 用类库 Spire.XLS.dll就可以进行分页处理的,下面的demo是用的社区版的做的,你可以参考下:测试文档:这里做分页处理,可分为横向分页和纵向分页.using Spire.Xls; namespace ExcelPageBreak_XLS { class Program { static void Main(...
全椒县17044382264: 利用存储过程写一个分页程序(用C#代码写) - ?
饶肃玄麦: select top @Page * from table where id not in(select top @page*(@PageNum-1) id from table)
全椒县17044382264: C#存储过程返回的是一张表,怎么对其进行分页呢??
饶肃玄麦: 在存储过程中就把它分页,然后根据需要的数据,每次返回批量的信息即可. 不要一次性返回一张大表的数据,那样性能损失很大.
全椒县17044382264: C#中动态表格(table)如何实现分页 - ?
饶肃玄麦: 不如用 gridview 或者repeater
全椒县17044382264: C# 的分页,不要一次都查出来,谁写过一个通用的,分享一下?
饶肃玄麦: 给你思路吧. 1.使用mssql 数据库,写一个分页查询的存储过程,网上很多源代,然后在c#里调用即可 2.先把所有数据读到dataset中,然后设置一个游标,给定每页最大容量,然后遍历取出数据即可.
全椒县17044382264: c#的分页程序 - ?
饶肃玄麦: 你是用的AspNetPager的分页控件吧,感觉这个分页控件最好是基于那种存储过过程分页的方式,也就是"select top 10 * from ..."的方式;还有你说的自己创建的TABLE是页面表格还是什么??如果是页面的话随便用的数据显示控件不就可以吗?比如Repeater,DataList等等,直接绑定数据源好了.
全椒县17044382264: 在C#中 如何实现Repeater分页??? - ?
饶肃玄麦: 存储过程: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go /* 功能描述: 通用分页显示查询 如果有自增标识字段,在@strGetFields中不要加入此字段信息, 如果非要加入的话,要 (fldName + 0) AS fldName 这样处理; 输入参数: ...
全椒县17044382264: 求一个分页方法,C#+SQL!?
饶肃玄麦: 首先先设置好每页需要显示的记录数SIZE,然后获取所有记录(可以存入DataTable dt),计算出总页数(dt.Rows.Count/SIZE+ (dt.Rows.Count%SIZE>0).GetHashCode()). 下面就是输出当前页数的内容,当前页面一般会将页码当做url参数存放...
全椒县17044382264: C# 中 如何分页 - ?
饶肃玄麦: 利用GridView分页模版进行分页共:页当前第:页条记录/页首 页上一页下一页尾 页页 protected void btnGO_Click(object sender, EventArgs e) { gvArticleInfo.PageIndex = int.Parse(((TextBox)gvArticleInfo.BottomPagerRow....
全椒县17044382264: 求asp.net + c# 的简单分页代码? - ?
饶肃玄麦: 你可以直接用PageDataSource控件来分页 或者直接用GridView,它自带分页功能 要不就用sql语句来分,一次取一部分 select top "+pagesize+" * from tablewhere id not in( select top "+pagesize*(pageindex-1)+" id from table order by id)order by id