我有一个插入存储过程喜欢这个
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,因此值不会在第二页中更新。
答案 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 INSERTED
和execute 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()