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 として取得しているため、2 ページ目で値が更新されません。

4

2 に答える 2

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()
于 2012-09-13T17:05:57.910 に答える
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);    
}

結果を 2 番目のページに渡す必要がある場合は、セッション変数を使用できます

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

2ページ目で読み直してください

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

2 番目の可能性として、QueryString を使用して値を渡します

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

「secondPage.aspx」で取得する

  int emailID = Convert.ToInt32(Page.Request["emailID"]);
于 2012-09-13T16:14:29.440 に答える