2013-05-11 7 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

+3

Просто добавьте один. Я не понимаю ваш вопрос. – Blorgbeard

+0

Вам, вероятно, не требуется соединение вообще. 'SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY AutoID ASC) AS RN, * FROM Experiment) T ГДЕ RN МЕЖДУ 11 И 21' –

ответ

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. * из эксперимента 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); –

+1

Я не вижу того, что вы создали на основе этой ошибки, изменив поле iData на TableName.iData. Основываясь на сокращении запроса, это должно быть A.iData или B.iData –

+0

. Инструкция BETWEEN должна быть частью вашей ГДЕ, а не вашей JOIN –

Смежные вопросы