2014-11-27 5 views
0

У меня проблема в течение последних нескольких дней. Я объясню, что я сделал. У меня есть таблица, созданная в базе данных под названием «Корзина». Эта корзина содержит: ClientID, Артикул и количество. В ClientID хранится идентификатор session.sessionID. В Artical просто число, подобное 1012. И в количестве число, подобное 1 или 3.Response.write показывает только первую запись из базы данных (this.session.sessionid)

Что бы я хотел, извлекает все записи с идентификатором session.session пользователя. Он работает на странице, но отображается только первая запись 4-5 записей, которые находятся в таблице корзины. Я думаю, что я пришел из-за проблемы, что он ищет this.session.sessionid, и когда он ее нашел, он не выглядит дальше.

Я попытался запрограммировать запрос, где сеансы. Но это не позволит мне зацикливаться, потому что он не знает for? Даже если я зациклю весь запрос за его пределами следующим образом: for (int i = 0; i < sessies.Length; i++) Он покажет больше записей .. но они все первые записи .. Я знаю, что это была глупая попытка, но я всегда могу попробовать.

Посмотрел по всему интернету, но не смог найти решение этого.

Надежда, чтобы скоро получить ответ от кого-то. Было бы признательно.

Используется следующий код:

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["GarageConnectionString"].ToString())) 
    { 
     string sessions = this.Session.SessionID; 



      SqlCommand cmd = new SqlCommand("SELECT * FROM cart where ClientID='" + sessions + "'", cn); 

      cn.Open(); 
      SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
      rdr.Read(); 


      TextBox1.Text = rdr[2].ToString(); 


      Response.Write("<br>" + ("Sessie id "+rdr[1].ToString())); 
      Response.Write("<br>" + ("Artikel nummer "+rdr[2].ToString())); 
      Response.Write("<br>" + ("Aantal "+rdr[3].ToString())); 

      cn.Close(); 

    } 

ответ

0

SqlDataReader переходит к следующей записи в наборе: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read%28v=vs.110%29.aspx

вызов Read() в цикле, например, так:

using (SqlConnection cn = newSqlConnection(ConfigurationManager.ConnectionStrings["GarageConnectionString"].ToString())) 
{ 
    string sessions = this.Session.SessionID; 



     SqlCommand cmd = new SqlCommand("SELECT * FROM cart where ClientID='" + sessions + "'", cn); 

     cn.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

     while (rdr.Read()) 
     { 
      TextBox1.Text = rdr[2].ToString(); 


      Response.Write("<br>" + ("Sessie id "+rdr[1].ToString())); 
      Response.Write("<br>" + ("Artikel nummer "+rdr[2].ToString())); 
      Response.Write("<br>" + ("Aantal "+rdr[3].ToString())); 
     } 

     cn.Close(); 

} 
+0

Спасибо, это сработало! – Tomcreates

0

Вы должны петля через DataReader: то есть:

while (rdr .Read()) 
{ 
    Console.WriteLine("{0}\t{1}", rdr .GetInt32(0), 
        rdr .GetString(1)); 
} 
+0

Спасибо, что это сработало :) – Tomcreates

0

Каждый вызов SqlDataReader.Read() получает одну строку, если нет больше строк, когда она возвращается ложный.

Так что вам нужно тросик, чтобы получить все строки:

while (rdr.Read()) { 
    // Use rdr methods to access the values from the current row. 
} 
+0

Спасибо, что это сработало :) – Tomcreates

0

Использование В то время как петля - Пример

 if (rdr .HasRows) 
     { 
      while (rdr .Read()) 
      { 
       Console.WriteLine("{0}\t{1}", rdr .GetInt32(0), 
        rdr .GetString(1)); 
      } 
     } 
     else 
     { 
      Console.WriteLine("No rows found."); 
     } 
     rdr .Close(); 
+0

Спасибо вам, это сработало :) – Tomcreates

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