获取刚刚插入的记录的ID

本文关键字:记录 ID 插入 获取 | 更新日期: 2023-09-27 17:48:57

我正在处理用户从gridview中选择的项目,并执行电子邮件和数据库插入操作。

当用户选择一个按钮时,下面的代码从gridview中获取信息,在order表中创建一个新订单,并在Transactions表中创建新条目。

如果我使用插入记录的这种方法,我如何获得最后插入的ID ?你能推荐一种不同的方法来解决这个简单的问题吗?

protected void btnOrder_Click(object sender, EventArgs e)
{
    double Total = 0;
    string MailFrom = "webadmin@domain.com";
    string MailTo = "purchasing@domain.com";
    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);
}

获取刚刚插入的记录的ID

在插入查询结束时使用范围标识,它将返回插入的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-recordhttp://www.objectreference.net/post/SCOPE_IDENTITY () -return-the-id-from-the-database-on-insert.aspx

基于@Muhammad Akhtar所说的,您可以在插入结束时返回标识,然后将标量传递回DB调用层/函数。我经常使用它作为检查,看看插入是否已经进入ok,返回-1或其他东西来表示它的失败。然后,您可以将此作为向用户传递消息的一种方式,告诉用户情况就是这样。

我也会构造你的代码不同,并有一个Order对象与OrderItems。这是从gridview创建的,并传递给数据访问层(DAL)。然后,DAL可以执行插入操作并返回Order对象,如果必要的话,还可以使用ID更新后续的OrderItems。