2011-04-07 102 views
5

我正在處理用戶從gridview中選擇的項目,並執行電子郵件和數據庫插入操作。獲取剛剛插入的記錄的ID?

當用戶選擇一個按鈕時,下面的代碼將從gridview中獲取信息,在Order表中創建一個新訂單,並在Transactions表中創建新的條目。

如何使用此插入記錄的方法獲取最後插入的ID? 你會推薦一個不同的方法來解決這個簡單的問題嗎?在您的插入查詢結束

protected void btnOrder_Click(object sender, EventArgs e) 
{ 
    double Total = 0; 
    string MailFrom = "[email protected]"; 
    string MailTo = "[email protected]"; 
    string MailSubject = "Online Order"; 
    string MailCC = ""; 
    string MailBCC = ""; 
    string MailReplyTo = ""; 
    string MailBody = ""; 

    TextBox ItmCostCode = (TextBox)form1.FindControl("txtCostCode"); 

    foreach (GridViewRow gvr in GridView1.Rows) 
    { 
     CheckBox cb = (CheckBox)gvr.FindControl("ItemSelect"); 
     Label ItmTotal = (Label)gvr.FindControl("ItmTotal"); 
     Label ItmPrice = (Label)gvr.FindControl("ItmPrice"); 
     Label ItmName = (Label)gvr.FindControl("lblName"); 
     TextBox ItmQty = (TextBox)gvr.FindControl("ItmQty"); 
     TextBox ItmID = (TextBox)gvr.FindControl("lblItemID"); 

     //Add entry to Order Table 
     SqlDataSource2.InsertParameters.Add("OrderDate", DateTime.Now.ToString("MMMM dd, yyyy")); 
     SqlDataSource2.InsertParameters.Add("OrderTotal", "0"); 
     SqlDataSource2.InsertParameters.Add("OrderAccount", "name"); 
     SqlDataSource2.InsertParameters.Add("OrderCostCentre", ItmCostCode.Text); 
     SqlDataSource2.Insert(); 

     //TODO: GET ORDERID HERE TO USE BELOW: 
     if (cb.Checked) 
     { 
      double Price = Convert.ToDouble(ItmPrice.Text); 
      double Qty = Convert.ToDouble(ItmQty.Text); 

      Total = Price * Qty; 
      OrderTotal = OrderTotal + Total; 

      MailBody = MailBody + "Item: "+ItmName.Text+" Quantity: "+ItmQty.Text+" Total: "+ItmTotal.Text+"\n\r"; 

      //Add entry to Transaction Table 
      SqlDataSource3.InsertParameters.Add("ItemID", ItmID.Text); 
      SqlDataSource3.InsertParameters.Add("OrderID",); 
      SqlDataSource3.InsertParameters.Add("Price", ItmPrice.Text); 

      SqlDataSource3.Insert(); 
     } 

     //TODO: Update Order table with OrderTotal 
    } 

    string strOrderTotal = OrderTotal.ToString(); 

    MailBody = MailBody+"Order Total: " + strOrderTotal+"\n\r"; 
    MailBody = MailBody + "Cost Code: " + ItmCostCode.Text; 

    MailService.Service1 Mailer = new MailService.Service1(); 
    Mailer.SendMail("Text", MailFrom, MailTo, MailCC, MailBCC, MailSubject, MailBody, MailReplyTo); 
} 

回答

10

使用範圍的身份,它會返回插入ID喜歡...

INSERT INTO table (ColumnName) VALUES(); 
GO 
SELECT SCOPE_IDENTITY(); 

編輯:對你有所幫助,這裏是一些文章,可以幫助你實施

http://msdn.microsoft.com/en-us/library/z72eefad.aspx

http://www.mikesdotnetting.com/Article/54/Getting-the-identity-of-the-most-recently-added-record http://www.objectreference.net/post/SCOPE_IDENTITY()-return-the-id-from-the-database-on-insert.aspx

+0

這就是我一直在閱讀,但我不確定如何直接構建我自己的插入語句:S – Kolten 2011-04-07 05:08:22

+0

@Kolten;我已編輯並粘貼一些鏈接以獲得幫助。 – 2011-04-07 05:51:16

+0

對鏈接+1,但我想給你更多:^) – Katia 2014-05-28 11:48:10

1

基於@Muhammad Akhtar的說法,您可以在插入結束時返回標識,然後將標量傳遞迴您的數據庫調用圖層/函數。我用它做了很多檢查,看Insert是否已經OK了,返回-1或者表示失敗。然後,您可以使用這種方式將消息傳回給用戶,說是這種情況。

我也會構造你的代碼不同,並有OrderItems的Order對象。這從gridview創建並傳遞到您的數據訪問層(DAL)。然後,如果需要,DAL可以執行插入並返回Order對象和隨ID一起更新的後續OrderItem。

相關問題