|
|
|
Forum Guru
      
участник
Last Login: 16.05.2007 12:30
Сообщ.: 71,
Visits: 127
|
|
| Попробовал написать так как мне посоветовал, но выводится сообщение Exception Details: System.FormatException: Input string was not in a correct format. на строку adapter.Fill(dataset);
Тут какая ситуация - в базе id типа int список айдишников типа string параметр тоже int ! Все работает пока id_list выглядит так 1 когда добавляешь еще один элемент все ломается 1,2
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Неудивительно :) Я по ошибке указал тип параметра как числовой, когда он должен быть строковым. SqlParameter prmIdList = adapter.SelectCommand.Parameters.Add("@id_list", SqlDbType.VarChar, 8000);
|
|
|
|
|
Forum Guru
      
участник
Last Login: 16.05.2007 12:30
Сообщ.: 71,
Visits: 127
|
|
| Я пробовал ставить varchar пишет Exception Details: System.Data.SqlClient.SqlException: Syntax error converting the varchar value '2,0' to a column of data type int. Можно что то сделать или придется менять тип id в БД ? Кстати почему то пишет 2,0 хотя писать должен 2,1
|
|
|
|
|
Forum Guru
      
участник
Last Login: 16.05.2007 12:30
Сообщ.: 71,
Visits: 127
|
|
В сессии весит двумерный массив тапа {1,1}{3,1} я динамически добавляю в него новые элементы {2,1} вот так см ниже!if (Session["cart"] == null && Request.QueryString["id"]!= null) { string buf = Request.QueryString["id"]; int[,] cart= new int[1,2]; cart[0,0]=Convert.ToInt32(buf); cart[0,1]=1; Session["cart"] = cart; Response.Redirect("cart.aspx"); } else if (Session["cart"] != null && Request.QueryString["id"]!= null) { int[,] cart = (int[,])Session["cart"]; int len_arr=cart.Length/2; int[,] tmp = new int[len_arr+1,2]; Array.Copy(cart,0,tmp,0,len_arr); cart=tmp; cart[len_arr-1,0]= Convert.ToInt32(Request.QueryString["id"]); cart[len_arr-1,1]= 1; Session["cart"] = cart; label2.Text=Convert.ToString(cart[len_arr-1,0]); label3.Text=Convert.ToString(cart[len_arr-1,1]); Response.Redirect("cart.aspx"); } else { int[,] cart = (int[,])Session["cart"]; StringBuilder id_list = new StringBuilder(); for (int i=0;i<cart.GetLength(0); i++) { if (i>0) id_list.Append(","); id_list.Append(cart[i,0]); } label1.Text =id_list.ToString(); } Судь ошибки в том что он откудато берет 0!! я не добавляю элементов со значением ноль! Не могу понять откуда он его берет!!!
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
shatalinalex (10.07.2006) Я пробовал ставить varchar. Пишет Exception Details: System.Data.SqlClient.SqlException: Syntax error converting the varchar value '2,0' to a column of data type int. Можно что то сделать или придется менять тип id в БД ?Я ошибся. Передать список значений через именнованный параметр нельзя. Придется генерировать непосредственно текст запроса StringBuilder id_list = new StringBuilder(); for (int i=0; i<cart.GetLength(0); i++) { if (i>0) id_list.Append(","); id_list.Append(cart[i,0]); }string selectQuery = String.Format("... AND tp.id IN {0}", id_list.ToString()); adapter.SelectCommand = new SqlCommand(selectQuery, sqlConn); shatalinalex (10.07.2006)
В сессии весит двумерный массив тапа {1,1}{3,1} я динамически добавляю в него новые элементы {2,1} вот так см ниже! ... Суть ошибки в том что он откудато берет 0!! я не добавляю элементов со значением ноль! Не могу понять откуда он его берет!!! Ты неправильно копируешь массив, отсюда и ошибка. Вот исправленный код. В чем именно была твоя ошибка подумай самостоятельно. if (Session["cart"] == null && Request.QueryString["id"]!= null) { string buf = Request.QueryString["id"]; int[,] cart= new int[1,2]; cart[0,0] = Convert.ToInt32(buf); cart[0,1] = 1; Session["cart"] = cart; Response.Redirect("cart.aspx"); } else if (Session["cart"] != null && Request.QueryString["id"]!= null) { int[,] tmp = new int[cart.GetLength(0)+1, 2]; Array.Copy(cart, 0, tmp, 0, cart.GetLength(0)*2); cart = tmp; cart[cart.GetLength(0)-1, 0] = Convert.ToInt32(Request.QueryString["id"]); cart[cart.GetLength(0)-1, 1] = 1; } else { int[,] cart = (int[,])Session["cart"]; StringBuilder id_list = new StringBuilder(); for (int i=0; i<cart.GetLength(0); i++) { if (i>0) id_list.Append(","); id_list.Append(cart[i,0]); } label1.Text = id_list.ToString(); }
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
И, кстати, советую создать для элементов корзины пару простейших классов.public class ShoppingCartItem { public ShoppingCartItem(int id, int quantity) { Id = id; Quantity = quantity; }
public int Id; public int Quantity; }
public class ShoppingCart { public static void AddToCart(int id, int quantity) { HttpSessionState session = HttpContext.Current.Session; ArrayList items = (ArrayList)Session["cart"]; if (null == items) { items = new ArrayList(); Session["cart"] = items; } items.Add(new ShoppingCartItem(id, quantity)); } } Хоть это и не совсем красивое решение, но даже оно сильно упростит тебе жизнь. Ведь запись cartItem.Quantity = 1 несет больше смысла, чем cart[0,1] = 1.
|
|
|
|