在后面的代码中获取最后插入的记录

时间:2012-09-13 16:11:12

标签: c# asp.net

我有一个插入存储过程喜欢这个

 insert into Profile_Master(FirstName,LastName,Dob,Gender,MobileNo,Country,State,EmailId,Password)
 values 
(@FirstName,@LastName,@Dob,@Gender,@MobileNo,@Country,@State,@EmailId,@Password)
set @id=SCOPE_IDENTITY()
return
end 

我想在后面的代码中获取最后插入的记录,如何捕获值?

            pid = cmd1.Parameters.Add("@id", System.Data.SqlDbType.Int);
            pid.Direction = System.Data.ParameterDirection.Output;
            int res = Convert.ToInt32(pid.Value);
            HttpContext.Current.Session["value"] = res.ToString();

这里我将res作为0,因此值不会在第二页中更新。

2 个答案:

答案 0 :(得分:0)

调用存储过程时,应该已经定义了所有参数,包括带有ParameterDirection.Output的@ID。这允许您在存储过程退出时读取参数的值。

像这样的东西

using(SqlConnection conn = new SqlConnection(CONNECTION_STRING))
{
    conn.Open();
    SqlCommand command = conn.CreateCommand();
    command.CommandType = CommandType.StoredProcedure;

    // Add all of your input parameters....

    SqlParameter pID = command.Parameters.Add
                 ("@ID",SqlDbType.Int);
    pID.Direction = ParameterDirection.Output;
    command.CommandText = "YourInsertProc";
    command.ExecuteNonQuery();

    // After executing the stored procedure, the SCOPE_IDENTITY() value 
    // could be read from the parameter value.
    int result = Convert.ToInt32(pID.Value);    
}

如果您需要将结果传递给第二页,则可以使用会话变量

 Page.Session["EMailID"] = pID.Value;

并在第二页重新阅读

 if(Page.Session["EMailID"] != null)
    emailID = Convert.ToInt32(Page.Session["EMailID"]);

作为第二种可能性,使用QueryString传递值

  url = "secondPage.aspx?emailID=" + pID.Value.ToString();

使用

获取“secondPage.aspx”
  int emailID = Convert.ToInt32(Page.Request["emailID"]);

答案 1 :(得分:0)

您还可以使用OUTPUT INSERTEDexecute scalar

您的存储过程

declare @idtbl table (id int)
insert into Profile_Master(FirstName,LastName,Dob,Gender,MobileNo,Country,
                            State,EmailId,Password)
output inserted.ID into @idtbl
values 
(@FirstName,@LastName,@Dob,@Gender,@MobileNo,@Country,@State,@EmailId,@Password)

SELECT id from @idtbl

在C#代码中:

command.CommandText = "sp_name_here";
//add parameters
command.CommandType = CommandType.StoredProcedure;
var id = command.ExecuteScalar();
HttpContext.Current.Session["value"] = id.ToString()