2013-12-14 85 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

相關問題