2016-10-11 75 views
0

我正在开发一个ASP.NET MVC应用程序。我有一个存储过程。我想发送一些值给存储过程。下面是参数如何确保存储过程正确执行?

@CorporateId Input 
@CitizenId Input 
@DocType  Input 
@Revert  Input 
@ResponseCode Out 
@ResponseMessage Out 

我需要发送值CorporateIdCitizenIdDocType@Revert其中值是0始终。当插入文件时,我想发送0作为值到@rever

示例代码我试过

public EmployeeDetail InsertDocumentFlagRevert(int? corporateID, string citizenId, int? docType, string connectingString) 
{ 
    string constring = connectingString; 
    EmployeeDetail objclValues = new EmployeeDetail(); 

    using (SqlConnection con = new SqlConnection(constring)) 
    { 
     using (SqlCommand cmd = new SqlCommand("uup_Employee_KYC_Uploaded_Flag", con)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 

      if (corporateID == null) 
      { 
       cmd.Parameters.AddWithValue("@CorporateID", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@CorporateID", corporateID); 
      } 

      if (string.IsNullOrEmpty(citizenId)) 
      { 
       cmd.Parameters.AddWithValue("@CitizenId", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@CitizenId", citizenId); 
      } 

      if (docType == null) 
      { 
       cmd.Parameters.AddWithValue("@DocType", DBNull.Value); 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@DocType", docType); 
      } 

      cmd.Parameters.Add("@ResponseCode", SqlDbType.VarChar, 2); 
      cmd.Parameters.Add("@ResponseMessage", SqlDbType.VarChar, 70); 
      cmd.Parameters.AddWithValue("@Revert", 0); 

      cmd.Parameters["@ResponseCode"].Direction = ParameterDirection.Output; 
      cmd.Parameters["@ResponseMessage"].Direction = ParameterDirection.Output; 

      con.Open(); 
      int i = cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 
    } 
} 

在这段代码,因为我值为-1。我不确定参数是否真的被传递给存储过程?有人可以帮我解决这个问题吗?

+0

使用事件探查器来捕获执行语句,然后使用它可以调试过程。 – shadow

回答

0

如您所知,ExecuteNonQuery返回受影响的行数。

尝试在存储过程中评论SET NOCOUNT ON。 这将返回受影响的行数。我希望这会帮助你解决问题。

+0

我没有把SET NOCOUNT ON放在我的sp中。 –

+0

'SET NOCOUNT ON'不用于此目的。当你运行一个查询时,SSMS会提供你有多少行被影响的细节。设置nocount将阻止该消息,因为这仅在直接执行查询时有用。 – vivek

0

您可以使用SQL事件探查器来检查从您的应用程序向SQL Server发送参数的查询。

或者,你可以使用两个输出变量,并检查其值,以确保该参数应用进行正确发送,则至少是对参数值附加在@ResponseMessage参数和调用后检查其值ExecuteNonQuery方法

+0

我可以从上面的SP返回@ResponseMessage –