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

时间:2012-02-17 15:26:06

标签: c# asp.net

我的表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

3 个答案:

答案 0 :(得分:8)

您可以在插入声明后选择SCOPE_IDENTITY

您还应该考虑对插入值使用SQL参数来防止SQL注入攻击。

更新

由于您使用的是SqlDataSource,请查看this tutorial。这是使用参数的缩写示例:

<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>

我没有对此进行测试,但它应该足够接近以使您走上正确的轨道。

答案 1 :(得分:2)

使用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注入

答案 2 :(得分:1)

这是一个很好的例子:

example