如何获取刚刚插入的记录ID

本文关键字:插入 记录 ID 何获取 获取 | 更新日期: 2023-09-27 18:25:09

我的表ID是一个自动递增列,我想在插入记录时获得ID。我怎么能这么做?

这就是我插入记录的方式:

ds.InsertCommand = "INSERT INTO Cases (pName,sDate,pAge,sAge,dAge,sex,status)
                    VALUES ('" + pname.Text + "','" + sdate.Text + "'," + patAge.Text + "," + sage.Text + "," + dage.Text + ",'" + sex.SelectedValue + "','Draft')";
ds.Insert();

dsSqlDataSource

如何获取刚刚插入的记录ID

您可以在插入语句后选择SCOPE_IDENTITY

您还应该考虑将SQL参数用于插入值,以防止SQL注入攻击。

更新

由于您使用的是SqlDataSource,请参阅本教程。下面是一个使用参数的缩写示例:

<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    InsertCommand=
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
         VALUES (@ProductName, @UnitPrice, @Discontinued); SELECT @ID = SCOPE_IDENTITY();">
    <InsertParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
        <asp:Parameter Name="ID" Type="Int" />
    </InsertParameters>
</asp:SqlDataSource>

我还没有测试过,但它应该足够近,让你走上正轨。

使用SCOPE_IDENTITY()

使用SQLCommand:

SqlCommand cmd = new SqlCommand("INSERT INTO Cases (pName,sDate,pAge,sAge,dAge,sex,status)
                    VALUES ('" + pname.Text + "','" + sdate.Text + "'," + patAge.Text + "," + sage.Text + "," + dage.Text + ",'" + sex.SelectedValue + "','Draft'); SELECT SCOPE_IDENTITY()";
int newRecordId = cmd.ExecuteScalar();

同样值得注意的是,您应该对查询进行参数化,以避免SQL注入

这里有一个很好的例子:

示例