2013-07-30 2 views
0

주문 정보에 둘 이상의 항목이있는 주문을 삽입하면 마지막 oder 세부 항목 만 삽입됩니다.Sqlite Transaction, 마지막 삽입 만 삽입

오전 [[상태], [전달],

Try 
    order_id = value.ID 
    If order_id = 0 Then 
     cmd = New SQLiteCommand(insert_order, conn) 
     cmd.Parameters.AddWithValue("@customer_id", value.CustomerID) 
     cmd.Parameters.AddWithValue("@status", value.Status) 
     cmd.Parameters.AddWithValue("@deliver", value.Deliver) 
     cmd.Parameters.AddWithValue("@created", Now.ToString("yyyy-MM-dd")) 
     cmd.Parameters.AddWithValue("@deleted", "0") 
     order_id = Convert.ToInt32(cmd.ExecuteScalar()) 
    Else 
     cmd = New SQLiteCommand(update_order, conn) 
     cmd.Parameters.AddWithValue("@customer_id", value.CustomerID) 
     cmd.Parameters.AddWithValue("@status", value.Status) 
     cmd.Parameters.AddWithValue("@deliver", value.Deliver) 
     cmd.Parameters.AddWithValue("@created", Now.ToString("yyyy-MM-dd")) 
     cmd.Parameters.AddWithValue("@deleted", "0") 
     cmd.Parameters.AddWithValue("@id", order_id) 
     cmd.ExecuteNonQuery() 
     '// delete previous order details 
     cmd = New SQLiteCommand(delete_order_details, conn) 
     cmd.Parameters.AddWithValue("@id", order_id) 
     cmd.ExecuteNonQuery() 
    End If 

    '// Add order details 
    For Each itm As typOrderDetail In value.orderDetails 
     cmd = New SQLiteCommand(insert_order_details, conn) 
     cmd.Parameters.AddWithValue("@cloth_id", itm.ClothID) 
     cmd.Parameters.AddWithValue("@order_id", order_id) 
     cmd.Parameters.AddWithValue("@color", itm.Color) 
     cmd.Parameters.AddWithValue("@desc", itm.Desc) 
     cmd.Parameters.AddWithValue("@qty", itm.Qty) 
     cmd.Parameters.AddWithValue("@cost", itm.Cost) 
     cmd.Parameters.AddWithValue("@service_id", itm.ServiceID) 
     cmd.Parameters.AddWithValue("@deleted", "0") 
     cmd.ExecuteNonQuery() 
    Next 
    sqlTrans.Commit() 
    'If bSave Then sqlTrans.Commit() Else sqlTrans.Rollback() 
Catch ex As Exception 
    'sqlTrans.Rollback() 
    Throw 
Finally 

    cmd.Dispose() 
    conn.Dispose() 
End Try 

여기가 SQL 문자열을 주문 ([CUSTOMER_ID] INTO

INSERT있는 다음 코드를 사용하여 데이터베이스에 삽입 만든], [삭제]) (@ customer_id, @ 상태, @ 배달, @ 만든, @ 삭제) 선택 last_insert_rowid(); orders_details ([ORDER_ID], [SERVICE_ID], [cloth_id], [DESC], [삭제], [수량], [컬러], [선정]) INTO

INSERT VALUES (@ ORDER_ID @ SERVICE_ID , @ cloth_id, @ desc, @ 삭제, @ 수량, @ 색상, @ 비용)

Pls는 내가 잘못하고 있습니까?

+0

내가 order_item이 변경되지 않았고 내가 sqlite가에 업데이트 명령을 사용하는 경우가 보인다 발견,이 문제는 – Smith

답변

1

코드에서 트랜잭션을 처리하는 방법을 알 수 없습니다. (죄송 C#으로)이 시도 :

using(SqliteTransaction tr = con.BeginTransaction()){ 
    foreach(var itm in value.orderDetails) { 
     //construct the command, add parameters, etc. 
     ... 
     //link the command to the transaction 
     cmd.Transaction = tr; 
     //execute the command 
     cmd.ExecuteNonQuery(); 
    } 
    tr.Commit(); 
} 
+0

일이 내가 게시 한 전체 코드 또는 그냥 order_details, 어쨌든 시도했지만 여전히 동일한 동일한 적용됩니다 – Smith

1

100 % 확신 할 수는 없지만 모든 주문 세부 정보에 대해 동일한 SQLiteCommand 개체를 유지해야합니다. 루프 밖에서 선언하고 매개 변수 값을 업데이트하고 루프에서 쿼리를 실행하십시오.

+0

덕분에 일이,하지만 난 그것을 시도하고 didn를 이 일을 – Smith