2013-05-11 20 views
-2

如何將WHERE條件添加到此;SQL RowNumber其中條件

sqlcmd = new SqlCommand("SELECT A.* from Experiment A INNER JOIN 
      (SELECT ROW_NUMBER() OVER(ORDER BY AutoID ASC) AS 'RN', "+ 
      "*FROM Experiment) B ON A.AutoID= B.AutoID AND B.RN between 
      11 and 21 ", con);

這是完整的代碼;

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     // sqlcmd = new SqlCommand("Select *From Experiment", con); 
    sqlcmd = new SqlCommand("SELECT A.* from Experiment A INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY AutoID ASC) AS 'RN', "+ 
     "*FROM Experiment) B ON A.AutoID= B.AutoID AND B.RN between 11 and 21 ", con); 


     adapter = new SqlDataAdapter(sqlcmd); 
     DataSet ds = new DataSet(); 
     con.Open(); 
     adapter.Fill(ds, "Experiment"); 
     Repeater1.DataSource = ds; 
     Repeater1.DataBind(); 
    } 
} 
+2

是什麼問題.. ?? – Ravi 2013-05-11 08:23:57

+3

只需加一個..我不明白你的問題。 – Blorgbeard 2013-05-11 08:24:05

+0

您可能根本不需要連接。 'SELECT * FROM(SELECT ROW_NUMBER()OVER(ORDER BY BYID ASC)AS RN,* FROM Experiment)T WHERE RN BETWEEN 11 AND 21' – 2013-05-11 08:32:54

回答

0

我抽象查詢到字符串變量(注意,與@開頭的字符串可以在攜帶多線)

string sqlQuery = @" 
    SELECT A.* 
    FROM Experiment A 
    INNER JOIN (
     SELECT ROW_NUMBER() OVER(ORDER BY AutoID ASC) AS 'RN', * 
     FROM Experiment) B ON A.AutoID = B.AutoID AND B.RN BETWEEN 11 AND 21" 

sqlcmd = new SqlCommand(sqlQuery, con); 

添加其中,只是追加它到字符串

sqlQuery += " WHERE B.RN = @RowNumberFilter AND A.AutoID = @AutoIDFilter"; 

我正在過濾到只顯示與行號過濾器和AutoId過濾器相匹配的行

但是,您需要告訴sql命令參數的值是什麼。

假設

int rowNumberFilter = "15"; 
int autoIDFilter = "101"; 

你有2個選擇

// options 1 
// explicitly add the parameter with the type then set the value 
sqlcmd.Parameters.Add("@RowNumberFilter", SqlDbType.Int); 
sqlcmd.Parameters["@RowNumberFilter"].Value = customerID; 

// option 2 
// implicitly add the parameter using AddWithValue(..) to convert the type 
sqlcmd.Parameters.AddWithValue("@AutoIDFilter", autoIDFilter); 

其良好的做法是使用參數,而不是直接concatinating值到查詢。

例如這是不好的

sqlQuery += " WHERE B.RN = " + rowNumberFilter.ToString() + " AND A.AutoID = " + autoIDFilter.ToString(); 

而且它的好習慣使用using聲明; SqlConnection,SqlCommand和我認爲SqlDataAdapter是一次性的,所以你應該使用語句來包裝它。

using (SqlConnection conn = new SqlConnection(...)) 
{ 
    ... 
} 
0
sqlcmd = new SqlCommand("SELECT A.* from Experiment A INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY AutoID ASC) AS 'RN', "+ "*FROM Experiment) B ON A.AutoID= B.AutoID AND B.RN between 11 and 21 " + "WHERE ......", con); 
+0

嗨,謝謝你的回覆;我已經做了這種格式,我得到了錯誤;不明確的列名'iData'。 sqlcmd = new SqlCommand(「SELECT A. * from Experiment A INNER JOIN(SELECT ROW_NUMBER()OVER(ORDER BY AutoID ASC)AS'RN',」+ 「* FROM Experiment)B ON A.AutoID = B.AutoID AND B.RN在11和21之間「+」WHERE iData ='ddd'「,con); – 2013-05-11 08:29:46

+1

根據該錯誤,我看不到您創建的WHERE字段iData爲TableName.iData。根據您的查詢速記,它應該是A.iData或B.iData – 2013-05-11 08:32:42

+0

BETWEEN語句應該是您的一部分而不是您的JOIN – 2013-05-11 08:36:59