我的表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();
ds
是SqlDataSource
答案 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)
这是一个很好的例子: