2013-12-14 101 views
-1

我正在使用C#和SQL服务器。我使用了顶级查询,但它只给我数据表的最高结果。通过在文本框中输入此值,我想要20-40或30-100行的结果。如何从数据表中获取特定行的记录?

CREATE TABLE [dbo].[newpatient] (
[id]   INT   IDENTITY (1, 1) NOT NULL, 
[serialno] VARCHAR (MAX) NULL, 
[patientname] VARCHAR (100) CONSTRAINT [DF__newpatien__patie__1273C1CD] DEFAULT ('') NULL, 
[age]   INT   CONSTRAINT [DF__newpatient__age__1367E606] DEFAULT ((0)) NULL, 
[address]  VARCHAR (100) CONSTRAINT [DF__newpatien__addre__145C0A3F] DEFAULT ('') NULL, 
[symptoms] VARCHAR (MAX) CONSTRAINT [DF__newpatien__sympt__15502E78] DEFAULT ('') NULL, 
[medicine] VARCHAR (MAX) CONSTRAINT [DF__newpatien__medic__164452B1] DEFAULT ('') NULL, 
[bookingdate] DATETIME  NULL, 
[alloteddate] DATETIME  NULL, 
[village]  VARCHAR (MAX) CONSTRAINT [DF__newpatien__villa__173876EA] DEFAULT ('') NULL, 
[thana]  VARCHAR (MAX) CONSTRAINT [DF__newpatien__thana__182C9B23] DEFAULT ('') NULL, 
[district] VARCHAR (MAX) CONSTRAINT [DF__newpatien__distr__1920BF5C] DEFAULT ('') NULL, 
[state]  VARCHAR (MAX) CONSTRAINT [DF__newpatien__state__1A14E395] DEFAULT ('') NULL, 
[isvalid]  BIT   CONSTRAINT [DF__newpatien__isval__1B0907CE] DEFAULT ('') NULL, 
CONSTRAINT [pk_id_newpatient] PRIMARY KEY CLUSTERED ([id] ASC) 

);

try 
    { 
    SuperClass sc = new SuperClass(); 
    Cursor = Cursors.WaitCursor; 
    timer1.Enabled = true; 
    rptPatients rpt = new rptPatients();// created report 
    SqlCommand MyCommand = new SqlCommand(); 
    SqlDataAdapter myDA = new SqlDataAdapter(); 
    DB_DOCTORDataSet myDS = new DB_DOCTORDataSet();//created dataset 
    SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=DB_DOCTOR;Integrated Security=True;Asynchronous Processing=True"); 
    MyCommand.Connection = con; 
    MyCommand.CommandText = "select top '" + textBox1.Text + "' * from NewPatient"; 
    MyCommand.CommandType = CommandType.Text; 
    myDA.SelectCommand = MyCommand; 
    myDA.Fill(myDS, "NewPatient"); 
    rpt.SetDataSource(myDS); 
    crystalReportViewer1.ReportSource = rpt; 
    } 
catch (Exception ex) 
    { 
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
+0

请重新格式化您的代码并使其可读。 –

+0

我想获取像20-30或50-60等行记录 –

+0

@RahulSharma,你可以请显示你的表结构? – Sohail

回答

1

不能使用TOP子句选择一个间隔,例如20〜40的最简单方法是选择TOP 40,然后丢弃该客户机上的第一个19行。

略少于简单地说就是将查询更改为类似

WITH T AS 
(
    SELECT TOP 40 NP.*, row_number() OVER (ORDER BY id) AS RN from NewPatient NP Order by xx 
) 
SELECT * from T where RN>=20 
+0

我怎样才能选择间隔? –

+1

上面的查询显示如何选择20到40间隔。 –

+0

可以帮助我使用上面的查询使用C#吗? –

0

如果在数据库中的数据由ID排序的,为什么不使用:

MyCommand.CommandText = "select * from NewPatient where id between " + textBox1.Text + " and " + textBox2.Text + " from NewPatient"; 

凡textBox1的1和TextBox持有您想要获取的记录范围。

+0

那么当有差距身份证范围?在这种情况下,使用BETWEEN并不总是返回完整的“行”页。 – Tony

+0

如果按照ID排序并且范围从10到30,那么您谈论的差距将会是“11,12,15,16,22,27”? 在这种情况下,您仍然可以获取所有这些记录,因为它们位于范围之间。 – Al3x

+0

在选择行的页面时,您总是需要10行,而不考虑ID。使用'BETWEEN'从示例列表“11,12,15,16,22,27”中得到10-20行将导致只返回4行,而不是10个。 – Tony

相关问题