对于我正在处理的Web应用程序,只要用户向数据库添加新记录,系统就会验证记录是否已成功添加:
if (txnHnd.AddNewTxnDetails(txnDetails) == true && txnHnd.AddNewTxnName(txnName) == true)
{
string message = "Record has been saved.";
lblErrorMsg.Text = message;
Response.Redirect("FXTxnList.aspx");
}
else
{
string message = "Saving record failed.";
lblErrorMsg.Text = message;
}
现在,如果记录已成功添加,系统只会在新添加的记录中插入一种Reference Number
。我的表有一个名为TxnID
的主键int
。这是一个自动增量数BTW。问题是,如何从数据库中提取新添加的记录的TxnID?我需要将代码放在if
语句的if-else
部分中,其中表示已保存记录。
答案 0 :(得分:1)
更新/创建SP
CREATE PROC SP_Insert
(
@name VARCHAR(50),
@id INT OUTPUT
)
AS
INSERT INTO Table (ColumnName) VALUES (@name)
SET @id=SCOPE_IDENTITY()
然后从ado.net调用此sp,如下所示
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_Insert";
SqlParameter param = new SqlParameter();
param.Name = "@id";
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
int id = (int)param.Value;
答案 1 :(得分:0)
如果您可以修改用于插入新记录的存储过程/命令,则应使用SCOPE_IDENTITY()
返回上次生成的标识值:
SELECT CAST(SCOPE_IDENTITY() AS INT)
如果您正在使用存储过程并且无法对其进行修改,则需要使用@@IDENTITY
,因为SCOPE_IDENTITY()
仅适用于同一范围(在本例中为存储过程)。但要小心,因为@@IDENTITY
将返回最后一个身份,而不受可能受影响的范围限制,例如通过触发器。
SELECT CAST(@@IDENTITY AS INT)
更多关于MSDN。