C# 在表单提交之后从数据库中检索最新的主键#

C# 在表单提交之后从数据库中检索最新的主键#,c#,sql-server,visual-studio,C#,Sql Server,Visual Studio,我有一个Webforms项目,我把信息存入数据库。我的问题是,提交页面后,如何在标签的下一页检索和显示新创建的ID(主键)?这可能吗 我有以下代码用于检索基于我所做的旧项目的ID: SqlCommand da3 = new SqlCommand(strSelectCmd3, conn); da3.CommandType = CommandType.StoredProcedure; SqlDataAdapter ds3 = new SqlDataAdapter(); ds3.SelectComm

我有一个Webforms项目,我把信息存入数据库。我的问题是,提交页面后,如何在标签的下一页检索和显示新创建的
ID
(主键)?这可能吗

我有以下代码用于检索基于我所做的旧项目的ID:

SqlCommand da3 = new SqlCommand(strSelectCmd3, conn);
da3.CommandType = CommandType.StoredProcedure;

SqlDataAdapter ds3 = new SqlDataAdapter();
ds3.SelectCommand = da3;

DataSet dsPerson3 = new DataSet();
ds3.Fill(dsPerson3);

Response.Redirect("Submitted.aspx?ID=" + dsPerson3.Tables[0].Rows[0]["CremationID"].ToString());

在insert SQL存储过程中,直接选择作用域_IDENTITY(),或将输出变量设置为该值。这将为您提供此表的PK

然后可以将该id用作下一页查询字符串的一部分。这将允许您加载该页面,而无需对数据库进行单独调用,并保证您具有正确的id


如果在不使用类似于此的特定于作用域的内容(例如作用域标识)的情况下试图找出最后一个id,则可能会出现这样的问题,即您可能会在页面上收到另一个进程/用户插入的id,而不是刚刚处理的id。

在insert SQL存储过程中,或者直接选择作用域标识(),或者将输出变量设置为该值。这将为您提供此表的PK

然后可以将该id用作下一页查询字符串的一部分。这将允许您加载该页面,而无需对数据库进行单独调用,并保证您具有正确的id


如果不使用类似于此的特定于作用域的内容(如scope_IDENTITY),试图找出最后一个id,则可能会出现这样的问题:您可能会收到另一个进程/用户在页面上插入的id,而不是刚刚处理的id。

我在存储过程中添加了以下语句:

SELECT TOP (1) CremationID, Last, First
FROM dbo.Cremation
WHERE (Last = @Last) AND (First = @First)
ORDER BY CremationID DESC
然后在新页面上插入一个标签,并将此代码放入页面加载中

CID.Text = Request.QueryString["ID"].ToString();

我在存储过程中添加了以下语句:

SELECT TOP (1) CremationID, Last, First
FROM dbo.Cremation
WHERE (Last = @Last) AND (First = @First)
ORDER BY CremationID DESC
然后在新页面上插入一个标签,并将此代码放入页面加载中

CID.Text = Request.QueryString["ID"].ToString();

如果表有日期字段,则只能按日期检索。然后使用OrderBy Descending Date并获取第一项。您是自己传入原始SQL来创建新项,还是使用存储过程?您绝对需要在创建新行的方法中返回ID,其他任何方法都无法100%工作。如果您以其他方式执行此操作,则可能会得到另一个用户同时插入的行。否!使用为表定义的主键来标识行。如果你没有PK,现在就做一个。没有理由不让它们出现在你所有的桌子上。当你有了它,在创建行时返回PK(例如),并将其传递到下一页。谢谢@DavidG和Brisbe42!我终于开始工作了!如果表有日期字段,则只能按日期检索。然后使用OrderBy Descending Date并获取第一项。您是自己传入原始SQL来创建新项,还是使用存储过程?您绝对需要在创建新行的方法中返回ID,其他任何方法都无法100%工作。如果您以其他方式执行此操作,则可能会得到另一个用户同时插入的行。否!使用为表定义的主键来标识行。如果你没有PK,现在就做一个。没有理由不让它们出现在你所有的桌子上。当你有了它,在创建行时返回PK(例如),并将其传递到下一页。谢谢@DavidG和Brisbe42!我终于开始工作了@Brisbee42谢谢,我将使用SCOPE\u IDENTITY方法进行更准确的ID检索。@Brisbee42谢谢,我将使用SCOPE\u IDENTITY方法进行更准确的ID检索。