09. juni 2006 - 14:47Der er
15 kommentarer og 2 løsninger
@@IDENTITY problem
Hej.
Jeg sidder med et ordrescript der skal skrive en ordre ind i min database. Problemet er @@IDENTITY som jeg trækker i min InsertOrder, som jeg ikke kan få smidt ind i InsertItem metodens "ordernum". Som jeg gør det nu skulle oNum gerne være lig med @@IDENTITY og så skrives ind i ”ordernum” kolonnen, men jeg får fejlen:
"INSERT INTO-sætningen indeholder det ukendte feltnavn "ordernum". Kontroller, at du har skrevet navnet korrekt, og forsøg derefter at udføre handlingen igen."
Min kode:
Public Shared Function WriteOrder( _ ByVal o As Order) As Boolean Dim cs As String
cs = WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString con = New OleDbConnection(cs)
oNum = InsertOrder(o) For Each item As CartItem _ In o.Cart.GetItems() InsertItem(item, oNum) Next tran.Commit() con.Close() Return True Catch ex As Exception Return False End Try End Function
Private Shared Function InsertOrder( _ ByVal o As Order) As Integer Dim command As New OleDbCommand() command.Connection = con command.Transaction = tran command.CommandText = "INSERT INTO Orders " _ + "(orderdate, custemail, " _ + "subtotal, salestax, " _ + "shipping) " _ + "VALUES (@OrderDate, @Custemail, " _ + "@subtotal, @salestax, " _ + "@shipping)" command.Parameters.AddWithValue( _ "@OrderDate", DateTime.Now) command.Parameters.AddWithValue( _ "@Custemail", o.Cust.Email) command.Parameters.AddWithValue( _ "@subtotal", o.SubTotal) command.Parameters.AddWithValue( _ "@salestax", o.SalesTax) command.Parameters.AddWithValue( _ "@shipping", o.Shipping) command.ExecuteNonQuery() command.CommandText = "SELECT @@IDENTITY" Return Convert.ToInt32(command.ExecuteScalar()) End Function
Private Shared Sub InsertItem( _ ByVal item As CartItem, _ ByVal oNum As Integer)
Using connection As New OleDbConnection(WebConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
System.Data.OleDb.OleDbException: INSERT INTO-sætningen indeholder det ukendte feltnavn "ordernum". Kontroller, at du har skrevet navnet korrekt, og forsøg derefter at udføre handlingen igen. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at OrderDB.InsertItem(CartItem item, Int32 oNum)
-mundi- ja, ordernum er fremmednøgle i min OrderItems-tabel og primær i min Orders-tabel. I min Orders-tabel er den "autonummerering", og i OrderItems er den af datatypen "tal".
arne_v - jo, fejlen bliver smidt som en exception når den afvikler InsertItem. Kan jeg placere nogle breakpoints bestemte steder for at hjælpe på det?
Og hvis jeg laver en response.write(oNum) i starten af min InsertItem metode, udskriver den ganske rigtigt et højeste ordernum fra min "Orders"-tabel, så den del virker - Men underligt nok ser det ud som om den ikke tror der findes en "ordernum" kolonne i OrderItems, som -mundi- er inde på ...
Det virker, bortset fra at hver ordre indskrives to gange i både OrderItems og Orders. De har fortløbende "ordernum", eksempelvis 1 i første post og 2 i næste.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.