0

これに取り組みましたが、更新が失敗する理由を理解できません。私はSQLが得意ではありません。簡単なストアド プロシージャを作成しました。

コードは次のとおりです。

CREATE PROCEDURE [dbo].sp_UpdateTeamMemberProfile
    @TeamMemberId int OUTPUT,
    @FirstName varchar(25),
    @LastName varchar(30),  
    @ContactNumber varchar (20),
    @ContactExt varchar (20) ,  
    @EmailAddress varchar(100),
    @Fax varchar (25),
    @LocationCity varchar (20),
    @LocationState varchar (20),
    @BeginWorkHrs int,
    @BeginWorkTime   varchar  (20) ,
    @EndWorkHrs  int ,
    @EndWorkTime varchar (20) ,
    @ZONE Varchar (20),
    @TeamMemberLanId varchar (20),
    @ManagerId varchar (20),
    @UpdateDate datetime
AS 
BEGIN
    SET NOCOUNT ON;

    BEGIN
       UPDATE dbo.LoanOwnerStamp
       SET FirstName = @FirstName,
           LastName = @LastName,
           ContactNumber = @ContactNumber,
           ContactExt = @ContactExt ,
           EmailAddress = @EmailAddress,
           Fax = @Fax, 
           LocationCity = @LocationCity, 
           LocationState = @LocationState,
           BeginWorkHrs = @BeginWorkHrs,
           BeginWorkTime = @BeginWorkTime,
           EndWorkHrs = @EndWorkHrs,
           EndWorkTime = @EndWorkTime, 
           Zone = @Zone,
           TeamMemberLanId = @TeamMemberLanId,
           ManagerId = @ManagerId ,
           UpdatedDate = @UpdateDate
       WHERE  
           TeamMemberLanId = @TeamMemberLanId 
           AND TeamMemberId = @TeamMemberId
     END 

     SET @TeamMemberId = SCOPE_IDENTITY()

     RETURN @TeamMemberId
 END

コードビハインドは次のとおりです...

using (SqlCommand updatetLSTeamMember = new SqlCommand("sp_UpdateTeamMemberProfile", myConnection))
{
    updatetLSTeamMember.CommandType = CommandType.StoredProcedure;
    updatetLSTeamMember.Parameters.Add("@FirstName", SqlDbType.VarChar, 25).Value = txtFirstName.Text;
    updatetLSTeamMember.Parameters.Add("@LastName", SqlDbType.VarChar, 30).Value = txtLastName.Text;
    updatetLSTeamMember.Parameters.Add("@ContactNumber", SqlDbType.VarChar, 20).Value = txtContactNumber.Text;
    updatetLSTeamMember.Parameters.Add("@ContactExt", SqlDbType.VarChar, 20).Value = txtContactExt.Text;
    updatetLSTeamMember.Parameters.Add("@EmailAddress", SqlDbType.VarChar, 100).Value = txtEmailAddress.Text;
    updatetLSTeamMember.Parameters.Add("@Fax", SqlDbType.VarChar, 25).Value = txtFax.Text;
    updatetLSTeamMember.Parameters.Add("@LocationCity", SqlDbType.VarChar, 20).Value = txtLocationCity.Text;
    updatetLSTeamMember.Parameters.Add("@LocationState", SqlDbType.VarChar, 20).Value = txtState.Text;
    updatetLSTeamMember.Parameters.Add("@BeginWorkHrs", SqlDbType.Int).Value = ddlBeginHrs.SelectedValue.ToString();
    updatetLSTeamMember.Parameters.Add("@BeginWorkTime", SqlDbType.VarChar, 20).Value = ddlBeginTime.SelectedValue.ToString();
    updatetLSTeamMember.Parameters.Add("@EndWorkHrs", SqlDbType.Int).Value = ddlEndHrs.SelectedValue.ToString();
    updatetLSTeamMember.Parameters.Add("@EndWorkTime", SqlDbType.VarChar, 20).Value = ddlEndTime.SelectedValue.ToString();
    updatetLSTeamMember.Parameters.Add("@Zone", SqlDbType.VarChar, 20).Value = ddlZone.SelectedItem.Text;
    updatetLSTeamMember.Parameters.Add("@TeamMemberLanId", SqlDbType.VarChar, 20).Value = txtTeamMemberLaniId.Text;
    updatetLSTeamMember.Parameters.Add("@ManagerId", SqlDbType.VarChar, 20).Value = gblUserId;
    updatetLSTeamMember.Parameters.Add("@UpdateDate", SqlDbType.DateTime).Value = DateTime.Now.ToLocalTime();

    pID = updatetLSTeamMember.Parameters.Add("@TeamMemberId", SqlDbType.Int);  // I'm thinking this is a culprit
    pID.Direction = ParameterDirection.Output;  // are these assignment correct.

    try
    {
        if (updatetLSTeamMember.Connection.State == ConnectionState.Closed)
        {
            updatetLSTeamMember.Connection.Open();
        }

        updatetLSTeamMember.ExecuteNonQuery();  // code bombs out here 

        string idcat = updatetLSTeamMember.Parameters["@TeamMemberId"].Value.ToString();

今、私の質問はいくつかの場所にあります.私のParameter.Direction出力は正しいですか、それはストアドプロシージャの観点から正しいですか?

どんな助けでも大歓迎です。

4

3 に答える 3

0

私は間違っているかもしれませんが、TeamMemberId (出力パラメーター) を使用している where 条件に基づいてレコードを更新していますが、c# 側では値を提供していません。出力パラメーターの構文は正しいですが、where 句で使用しています。値は何ですか...スコープ ID 部分は、更新コマンドの実行後に実行されます。

于 2013-08-08T18:20:41.990 に答える