调用第二方法不工作 - asp.net和c#

问题描述:

public static int MassEmpNumUpdate(string empToUpdateFrom, string empToUpdateTo) 
{ 
    string sql; 
    int retval; 
    using (cn = new SqlConnection(ConnectionString())) 
    { 
     cn.Open(); 
     sql = "uspUpdateDet"; // THIS IS THE 1ST SP 
     using (cmd = new SqlCommand(sql, cn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@EmpToUpdateFrom", empToUpdateFrom); 
      cmd.Parameters.AddWithValue("@EmpToUpdateTo", empToUpdateTo); 
      cmd.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
      cmd.ExecuteNonQuery(); 

      retval = (int)cmd.Parameters["@ReturnValue"].Value; 

     } 

     if (retval == 0) 
     { 
      sql = "uspUpdatePrev"; // THIS IS THE 2ND SP - not working :(
      using (cmd = new SqlCommand(sql, cn)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("@EmpToUpdateFrom", empToUpdateFrom); 
       cmd.Parameters.AddWithValue("@EmpToUpdateTo", empToUpdateTo); 
       cmd.Parameters.Add("@returnvalue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
       return cmd.ExecuteNonQuery(); 
      } 
     } 

     return retval; 
    } 

} 

}调用第二方法不工作 - asp.net和c#

我有2存储过程(将更新2个表)的uspUpdateDet和uspUpdatePrev。 我的问题是为什么我的第二个(uspUpdatePrev)语句不起作用。者均基于SP被从SQL Server工作的权利08.

SP1:

集ANSI_NULLS ON 设定QUOTED_IDENTIFIER ON 去

ALTER PROCEDURE [DBO]。[uspUpdateDet]

@EmpToUpdateFrom varchar(7) 
, @EmpToUpdateTo varchar(7) 

AS SET NOCOUNT ON;

DECLARE @affectedRows int SET @affectedRows = 0;

BEGIN UPDATE TBL1 SET DET1 = @EmpToUpdateTo WHERE DET1 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET DET2 = @EmpToUpdateTo WHERE DET2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L1 = @EmpToUpdateTo WHERE L2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L2 = @EmpToUpdateTo WHERE L2 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L3 = @EmpToUpdateTo WHERE L3 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ RO WCOUNT END

BEGIN UPDATE TBL1 SET L4 = @EmpToUpdateTo WHERE L4 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L5 = @EmpToUpdateTo WHERE L5 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L6 = @EmpToUpdateTo WHERE L6 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L7 = @EmpToUpdateTo WHERE L7 = @EmpToUpdateFrom SET @affectedRows = @affectedRows + @@ ROWCOUNT END

BEGIN UPDATE TBL1 SET L8 = @EmpToUpdateTo WHERE L8 = @EmpToUpdateFrom SET @ affectedRows = @affectedRows + @@ ROWCOUNT END

回报@affectedRows

+0

你在问为什么没有解释什么是预期的结果(SP应该做什么......),以及实际结果是什么(异常堆栈跟踪,错误的数据...),为什么不起作用。你可以更具体一点。 – 2009-08-06 15:58:59

+1

你确定从第一个存储的返回值是这样设置的吗?查看MSDN的文档,您可能希望将retval设置为等于ExecuteNonQuery的结果,而不是尝试从Parameters集合中获取它。 – 2009-08-06 16:09:53

+0

步入执行第二个存储过程时收到的_exact_错误消息是什么? – 2009-08-06 16:22:43

首先猜测是你的第一块using语句被关闭的连接。你遇到了什么错误?

编辑:看着this question看起来好像没有发生,所以最好的猜测是你根本没有碰到这个块。你确定发生了什么?

+0

我没有收到错误只是一条消息:没有记录被更新,但有一些记录存在。 – Yves 2009-08-06 15:57:39

+0

如果你分析你的数据库,SP是否运行? – Jon 2009-08-06 15:58:49

+0

是的,它运行正确在SQL服务器08 – Yves 2009-08-06 16:09:13

我不知道你的意思是“不工作”,但最有可能的是retval不是0

你真的应该调试应用程序,看看你从第一次通话回来。