0

我有一个像这样的插入存储过程

 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,因此第二页中的值不会更新。

4

2 回答 2

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"]);
于 2012-09-13T16:14:29.440 回答
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()
于 2012-09-13T17:05:57.910 回答