Столбец "PDTID" не принадлежит таблице
Привет, друзья, у меня проблема. Моя страница AddToCart работала гладко без входа в систему. Но недавно я добавил страницу входа в систему. После этого он показывает мне столбец исключений "PDTID", который не принадлежит таблице .Что же делать?
Что я уже пробовал:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.OleDb; public partial class AddToCart : System.Web.UI.Page { static Boolean availabledesignid = false; static Boolean orderconfirm; static int quantityavailable; protected void Page_Load(object sender, EventArgs e) { if (Session["username"] == null) // It was working properly, before adding this login part { Response.Redirect("~/Login/Login.aspx"); } if (Session["addproduct"].ToString() == "true") { DataTable dt = new DataTable(); DataRow dr; dt.Columns.Add("sno"); dt.Columns.Add("PDTID"); dt.Columns.Add("PDTNAME"); dt.Columns.Add("IMAGE"); dt.Columns.Add("PRICE"); dt.Columns.Add("QUANTITY"); dt.Columns.Add("totalprice"); if (Request.QueryString["id"] != null) { if (Session["Buyitems"] == null) { dr = dt.NewRow(); String mycon = @"Provider=Microsoft.Ace.OLEDB.12.0;Data Source=C:\Users\computer\Documents\Visual Studio 2010\WebSites\WebSite3\Shop.accdb"; OleDbConnection scon = new OleDbConnection(mycon); String myquery = "select * from Products where PDTID=" + Request.QueryString["id"]; OleDbCommand cmd = new OleDbCommand(); cmd.CommandText = myquery; cmd.Connection = scon; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); dr["sno"] = 1; dr["PDTID"] = ds.Tables[0].Rows[0]["PDTID"].ToString(); //here its showing that exception dr["PDTNAME"] = ds.Tables[0].Rows[0]["PDTNAME"].ToString(); dr["IMAGE"] = ds.Tables[0].Rows[0]["IMAGE"].ToString(); dr["QUANTITY"] = Request.QueryString["QUANTITY"]; dr["QUANTITY"] = Request.QueryString["QUANTITY"]; dr["PRICE"] = ds.Tables[0].Rows[0]["PRICE"].ToString(); Int64 price = Convert.ToInt64(ds.Tables[0].Rows[0]["PRICE"].ToString()); Int64 quantity = Convert.ToInt64(Request.QueryString["QUANTITY"].ToString()); Int64 totalprice = price * quantity; dr["totalprice"] = totalprice; savecartdetail(1, ds.Tables[0].Rows[0]["PDTID"].ToString(), ds.Tables[0].Rows[0]["PDTNAME"].ToString(), ds.Tables[0].Rows[0]["IMAGE"].ToString(), "1", ds.Tables[0].Rows[0]["PRICE"].ToString(), totalprice.ToString()); dt.Rows.Add(dr); GridView1.DataSource = dt; GridView1.DataBind(); Session["buyitems"] = dt; GridView1.FooterRow.Cells[5].Text = "Total Amount"; GridView1.FooterRow.Cells[6].Text = grandtotal().ToString(); Response.Redirect("AddToCart.aspx"); }
Gerry Schmitz
В какой момент он жалуется? Таблица доступа может быть проблемой для всех, кого мы знаем.
Maciej Los
Вы уверены, что в базе данных Access есть столбец PDTID?
Я бы все изменил:
SELECT * from Products where PDTID=?
к:
SELECT * from Products AS P where P.PDTID=?
Вы должны быть предупреждены о SqlInjection Итак, я бы использовал OleDbCommand с paramteres!
CHill60
Похоже, это решение для меня
Maciej Los
Я последовал твоему совету, Кэролайн. ;)
Member 14186984
Система.ArgumentException был необработан пользовательским кодом
Сообщение=столбец "PDTID" не принадлежит таблице .
Источник=System.Data
Трассировка стека:
в System.Data.DataRow.GetDataColumn(строка, столбец columnname)
at System.Data.DataRow.set_Item(строковое имя столбца, значение объекта)
в AddToCart.Page_Load(отправитель объекта, EventArgs e) в c:\Users\computer\Documents\Visual Studio 2010\WebSites\WebSite3\AddToCart.aspx.cs:строка 103
в System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
в System.Web.Util.CalliEventHandlerDelegateProxy.Обратного вызова(объект отправителя, EventArgs в электронной)
в системе.Веб.Пользовательского интерфейса.Контроль.OnLoad(EventArgs e)
в системе.Веб.Пользовательского интерфейса.Контроль.LoadRecursive()
в системе.Веб.Пользовательского интерфейса.Страницы.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Свойство innerexception: