C# 第一页显示最后10行,而下一页显示最后10行
我使用此函数在datagridview中使用分页显示数据,在第1页上使用此函数,我可以正确显示最后10行,但当我单击“下一步”按钮时,它应该显示最后10行,但在每个下一页上都显示前10行,我想这是我对其他部分的cmd2查询中的错误,但这是什么?我正在使用Access数据库C# 第一页显示最后10行,而下一页显示最后10行,c#,.net,C#,.net,我使用此函数在datagridview中使用分页显示数据,在第1页上使用此函数,我可以正确显示最后10行,但当我单击“下一步”按钮时,它应该显示最后10行,但在每个下一页上都显示前10行,我想这是我对其他部分的cmd2查询中的错误,但这是什么?我正在使用Access数据库 private DataTable GetCurrentRecords(int page, OleDbConnection con) { dt = new DataTable();
private DataTable GetCurrentRecords(int page, OleDbConnection con)
{
dt = new DataTable();
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
try
{
// con.Open();
this.adp1.SelectCommand = cmd2;
this.adp1.Fill(dt);
txtPaging.Text = string.Format("{0} of {1} ", this.CurrentPageIndex, this.TotalPage);
}
finally
{
// con.Close();
}
return dt;
}
您可以使用over at t-sql实现分页
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY task_id ) AS RowNum, QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks
FROM [Questions]
) AS RowConstrainedResult
WHERE RowNum >= 10
AND RowNum < 20
ORDER BY RowNum
您可以使用over at t-sql实现分页
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY task_id ) AS RowNum, QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks
FROM [Questions]
) AS RowConstrainedResult
WHERE RowNum >= 10
AND RowNum < 20
ORDER BY RowNum
您有两种选择:
选择1
在数据库中创建一个新的存储过程,如下所示:
USE [YourDatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE RelatedSchemaName.StoredProcedureName
@bintStartingRowNumber bigint,
@bintRowLength bigint
AS
BEGIN
SET NOCOUNT OFF;
WITH AllRows AS
(
SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, *
FROM Questions AS Q
)
SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks
FROM AllRows
WHERE RowNumber BETWEEN @bintStartingRowNumber AND @bintStartingRowNumber + @bintRowLength
ORDER BY QID, DESC
END
GO
现在,将其添加到项目中,然后更改以下代码行:
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
为此:
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new SqlCommand(StoredProcedureName);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add("@bintStartingRowNumber", SqlDbType.BigInt).Value = intFirstRowNumber;
cmd2.Parameters.Add("@bintRowLength", SqlDbType.BigInt).Value = PageSize;
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new OleDbCommand(
"WITH AllRows AS (" +
"SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, * " +
"FROM Questions AS Q) " +
"SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks " +
"FROM AllRows " +
"WHERE RowNumber BETWEEN " + intFirstRowNumber + " AND " + (intFirstRowNumber + PageSize) +
" ORDER BY QID, DESC", con);
选择2
更改以下代码行:
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
为此:
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new SqlCommand(StoredProcedureName);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add("@bintStartingRowNumber", SqlDbType.BigInt).Value = intFirstRowNumber;
cmd2.Parameters.Add("@bintRowLength", SqlDbType.BigInt).Value = PageSize;
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new OleDbCommand(
"WITH AllRows AS (" +
"SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, * " +
"FROM Questions AS Q) " +
"SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks " +
"FROM AllRows " +
"WHERE RowNumber BETWEEN " + intFirstRowNumber + " AND " + (intFirstRowNumber + PageSize) +
" ORDER BY QID, DESC", con);
您有两种选择:
选择1
在数据库中创建一个新的存储过程,如下所示:
USE [YourDatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE RelatedSchemaName.StoredProcedureName
@bintStartingRowNumber bigint,
@bintRowLength bigint
AS
BEGIN
SET NOCOUNT OFF;
WITH AllRows AS
(
SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, *
FROM Questions AS Q
)
SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks
FROM AllRows
WHERE RowNumber BETWEEN @bintStartingRowNumber AND @bintStartingRowNumber + @bintRowLength
ORDER BY QID, DESC
END
GO
现在,将其添加到项目中,然后更改以下代码行:
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
为此:
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new SqlCommand(StoredProcedureName);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add("@bintStartingRowNumber", SqlDbType.BigInt).Value = intFirstRowNumber;
cmd2.Parameters.Add("@bintRowLength", SqlDbType.BigInt).Value = PageSize;
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new OleDbCommand(
"WITH AllRows AS (" +
"SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, * " +
"FROM Questions AS Q) " +
"SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks " +
"FROM AllRows " +
"WHERE RowNumber BETWEEN " + intFirstRowNumber + " AND " + (intFirstRowNumber + PageSize) +
" ORDER BY QID, DESC", con);
选择2
更改以下代码行:
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
if (page == 1)
{
cmd2 = new OleDbCommand("Select TOP " + PageSize + " QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions ORDER BY QID DESC", con);
// CurrentPageIndex++;
}
else
{
int PreviouspageLimit = (page - 1) * PageSize;
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) ", con); // +
//"order by MedicalClgID", con);
}
为此:
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new SqlCommand(StoredProcedureName);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add("@bintStartingRowNumber", SqlDbType.BigInt).Value = intFirstRowNumber;
cmd2.Parameters.Add("@bintRowLength", SqlDbType.BigInt).Value = PageSize;
int intFirstRowNumber = (page - 1) * PageSize;
cmd2 = new OleDbCommand(
"WITH AllRows AS (" +
"SELECT ROW_NUMBER() OVER (ORDER BY QID, DESC) AS RowNumber, * " +
"FROM Questions AS Q) " +
"SELECT QID, Question, Opt1, Opt2, Opt3, Opt4, AnsOp, Marks " +
"FROM AllRows " +
"WHERE RowNumber BETWEEN " + intFirstRowNumber + " AND " + (intFirstRowNumber + PageSize) +
" ORDER BY QID, DESC", con);
将cmd2更改为此将按降序给出所有行
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) " +
"ORDER BY QID DESC", con);
将cmd2更改为此将按降序给出所有行
cmd2 = new OleDbCommand("Select TOP " + PageSize +
" QID,Question,Opt1,Opt2,Opt3,Opt4,AnsOp,Marks from Questions " +
"WHERE QID NOT IN " +
"(Select TOP " + PreviouspageLimit + " QID from Questions ORDER BY QID DESC) " +
"ORDER BY QID DESC", con);
获取此错误的SQL语句无效;应为“删除”、“插入”、“过程”、“选择”或“更新”。在此行“this.adp1.Filldt;”使用第二个选项时,这些代码用于Microsoft SQL SERVER而不是Microsoft Office Access。您的问题中没有提到您的目标数据库。因此,我为Microsoft SQL Server添加了代码。Microsoft Office Access不支持以下操作:按QID排序的行数,DESCyes,我已编辑了问题并在问题中添加了数据库信息获取此错误无效SQL语句;应为“删除”、“插入”、“过程”、“选择”或“更新”。在此行“this.adp1.Filldt;”使用第二个选项时,这些代码用于Microsoft SQL SERVER而不是Microsoft Office Access。您的问题中没有提到您的目标数据库。因此,我为Microsoft SQL Server添加了代码。Microsoft Office Access不支持以下操作:行号超过QID的订单号,描述是的,我已编辑了问题并添加了有问题的数据库信息