Массивы
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        


««12

Массивы Expand / Collapse
Автор
Сообщение
10.07.2006 15:26
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum 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

Сообщ. #900406
10.07.2006 15:34
Supreme Being

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);

Сообщ. #900407
10.07.2006 15:39
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum 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

Сообщ. #900408
10.07.2006 16:18
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum 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!! я не добавляю элементов со значением ноль! Не могу понять откуда он его берет!!!

Сообщ. #900410
10.07.2006 17:29
Supreme Being

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();
}
Сообщ. #900415
10.07.2006 18:25
Supreme Being

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.

Сообщ. #900430
« пред. тема | след. тема »

««12

Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 7:08