PDA

View Full Version : shopping cart



fereshtehrahimi
جمعه 28 دی 1386, 17:30 عصر
سلام
من محیط یک فروشگاه را به صورت خیلی ابتدایی(البته با کمک) طراحی کردم تمام مراحل مورد نظر را با موفقیت انجام می دهد تنها مشکل در قسمت تابع
btnSubmitOrder_Click
می باشد که به جای ثبت اطلاعات به ازای هر فیلد مقدار
null
وارد می کند.
البته تابع به صورت زیر بود :

Private Sub btnSubmitOrder_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim tblOrders As DataTable = dsShoppingCart.Tables.Add("Orders")
tblOrders.Columns.Add("OrderID", GetType(Integer))
tblOrders.Columns.Add("CustomerID", GetType(String))
tblOrders.Columns.Add("OrderDate", GetType(Date))
tblOrders.Columns("OrderID").AutoIncrement = True
tblOrders.Columns("OrderID").AutoIncrementSeed = -1
tblOrders.Columns("OrderID").AutoIncrementStep = -1
tblOrders.PrimaryKey = New DataColumn() {tblOrders.Columns("OrderID")}


tblOrders.Rows.Add(New Object() {Nothing, request.Cookies("CustomerID").value, DateTime.Now})
dsShoppingCart.Relations.Add(tblOrders.Columns("OrderID"), _
dsShoppingCart.Tables("Order Details").Columns("OrderID"))
Dim strSQL As String
Dim cmdInsert As OleDbCommand
Dim daOrders, daDetails As OleDbDataAdapter

daOrders = New OleDbDataAdapter("", cn)
strSQL = "INSERT INTO Orders (CustomerID, OrderDate) VALUES (?, ?); SELECT SCOPE_IDENTITY() AS OrderID"
cmdInsert = New OleDbCommand(strSQL, cn)
cmdInsert.Parameters.Add(New OleDbParameter("@CustomerID", OleDbType.WChar, 50, ParameterDirection.Input, False, 0, 0, "CustomerID", DataRowVersion.Current, Nothing))
cmdInsert.Parameters.Add(New OleDbParameter("@OrderDate", OleDbType.DBTimeStamp, 0, ParameterDirection.Input, False, 0, 0, "OrderDate", DataRowVersion.Current, Nothing))
cmdInsert.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord
daOrders.InsertCommand = cmdInsert

daDetails = New OleDbDataAdapter("", cn)
strSQL = "INSERT INTO [Order Details] (OrderID, ProductID, Quantity, UnitPrice) VALUES (?, ?, ?, ?)"
cmdInsert = New OleDbCommand(strSQL, cn)
cmdInsert.Parameters.Add(New OleDbParameter("@OrderID", OleDbType.Integer, 0, ParameterDirection.Input, False, 0, 0, "OrderID", DataRowVersion.Current, Nothing))
cmdInsert.Parameters.Add(New OleDbParameter("@ProductID", OleDbType.Integer, 0, ParameterDirection.Input, False, 0, 0, "ProductID", DataRowVersion.Current, Nothing))
cmdInsert.Parameters.Add(New OleDbParameter("@Quantity", OleDbType.Integer, 0, ParameterDirection.Input, False, 0, 0, "Quantity", DataRowVersion.Current, Nothing))
cmdInsert.Parameters.Add(New OleDbParameter("@UnitPrice", OleDbType.Currency, 0, ParameterDirection.Input, False, 0, 0, "UnitPrice", DataRowVersion.Current, Nothing))
cmdInsert.UpdatedRowSource = UpdateRowSource.None
daDetails.InsertCommand = cmdInsert

cn.Open()
daOrders.Update(tblOrders)
daDetails.Update(dsShoppingCart.Tables("Order Details"))
cn.Close()

Dim intNewOrderID As Integer = tblOrders.Rows(0)("OrderID")
Response.Write("<P>Thank you for your business. Your order number is: <B>" & intNewOrderID & "</B></P>")
Response.Write("<P>Please keep this order number for your records.</P>")

gridCart.Columns(5).Visible = False
gridCart.Columns(6).Visible = False
btnSubmitOrder.Visible = False
dsShoppingCart.Dispose()
dsShoppingCart = Nothing
SaveCart()

End Sub


که من آن را به این شکل تغییر دادم لطفا من را راهنمایی کنید:

Private Sub btnSubmitOrder_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim tblOrders As DataTable = dsShoppingCart.Tables.Add("Orders")
tblOrders.Columns.Add("OrderID", GetType(Integer))
tblOrders.Columns.Add("CustomerID", GetType(String))
tblOrders.Columns.Add("OrderDate", GetType(Date))
tblOrders.Columns("OrderID").AutoIncrement = True
tblOrders.Columns("OrderID").AutoIncrementSeed = -1
tblOrders.Columns("OrderID").AutoIncrementStep = -1
tblOrders.PrimaryKey = New DataColumn() {tblOrders.Columns("OrderID")}


tblOrders.Rows.Add(New Object() {Nothing, request.Cookies("CustomerID").value, DateTime.Now})
dsShoppingCart.Relations.Add(tblOrders.Columns("OrderID"), _
dsShoppingCart.Tables("Order Details").Columns("OrderID"))
Dim strSQL As String
Dim cmdInsert As OleDbCommand
Dim daOrders, daDetails As OleDbDataAdapter

daOrders = New OleDbDataAdapter("", cn)
strSQL = "INSERT INTO Orders (CustomerID, OrderDate) VALUES (?, ?); SELECT SCOPE_IDENTITY() AS OrderID"
cmdInsert = New OleDbCommand(strSQL, cn)
cmdInsert.Parameters.Add("@CustomerID", Data.OleDb.OleDbType.WChar, 50)
cmdInsert.Parameters.Add("@OrderDate", Data.OleDb.OleDbType.DBTimeStamp, 0)
cmdInsert.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord
daOrders.InsertCommand = cmdInsert

daDetails = New OleDbDataAdapter("", cn)
strSQL = "INSERT INTO [Order Details] (OrderID, ProductID, Quantity, UnitPrice) VALUES (?, ?, ?, ?)"
cmdInsert = New OleDbCommand(strSQL, cn)
cmdInsert.Parameters.Add("@OrderID", Data.OleDb.OleDbType.Integer, 0)
cmdInsert.Parameters.Add("@ProductID", Data.OleDb.OleDbType.Integer, 0)
cmdInsert.Parameters.Add("@Quantity", Data.OleDb.OleDbType.Integer, 0)
cmdInsert.Parameters.Add("@UnitPrice", Data.OleDb.OleDbType.Currency, 0)
cmdInsert.UpdatedRowSource = UpdateRowSource.None
daDetails.InsertCommand = cmdInsert

cn.Open()
daOrders.Update(tblOrders)
daDetails.Update(dsShoppingCart.Tables("Order Details"))
cn.Close()

Dim intNewOrderID As Integer = tblOrders.Rows(0)("OrderID")
Response.Write("<P>Thank you for your business. Your order number is: <B>" & intNewOrderID & "</B></P>")
Response.Write("<P>Please keep this order number for your records.</P>")

gridCart.Columns(5).Visible = False
gridCart.Columns(6).Visible = False
btnSubmitOrder.Visible = False
dsShoppingCart.Dispose()
dsShoppingCart = Nothing
SaveCart()

End Sub
باتشکر فرشته

fereshtehrahimi
یک شنبه 30 دی 1386, 13:24 عصر
خواهش میکنم یکی راهنماییم کند

Behrouz_Rad
یک شنبه 30 دی 1386, 18:25 عصر
معمولا کسی حوصله نداره اینقدر کد رو بررسی کنه.
حداقل من وقتی تاپیکی رو می خونم و اینقدر کد توش می بینیم، بدون لحظه ای درنگ، دکمه ی X اون پنجره رو می زنم.
سعی کنید سوالاتتون کوتاه باشه.
چه از نظر کد و چه از نظر توضیح.

موفق باشید.

Buggsbunny
یک شنبه 30 دی 1386, 20:37 عصر
فکر کننم تغیراتی که در بخش تعریف پاراکتر ها دادید باعث شده که مقداری برای پارامترها ارسال نشه واسه همینه که null درج می شه
یک بار دیگه این کد را با کد خودتون مقایسه کنید


cmdInsert.Parameters.Add(New OleDbParameter("@CustomerID", OleDbType.WChar, 50, ParameterDirection.Input, False, 0, 0, "CustomerID", DataRowVersion.Current, Nothing))
cmdInsert.Parameters.Add(New OleDbParameter("@OrderDate", OleDbType.DBTimeStamp, 0, ParameterDirection.Input, False, 0, 0, "OrderDate", DataRowVersion.Current, Nothing))


و کد شما:


cmdInsert.Parameters.Add("@CustomerID", Data.OleDb.OleDbType.WChar, 50)
cmdInsert.Parameters.Add("@OrderDate", Data.OleDb.OleDbType.DBTimeStamp, 0)


و یه سر هم به اینجا بزنید تا از نحوه تعریف پارامتر ها مطلع شوید:

http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbparameter.oledbparameter(VS .80).aspx