【问题标题】:How to make sure stored procedure executes correctly?如何确保存储过程正确执行?
【发布时间】:2016-10-11 04:18:28
【问题描述】:

我正在开发一个 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();
         }
     }
 }

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

【问题讨论】:

  • 使用分析器捕获执行语句,然后使用它可以调试过程。

标签: asp.net sql-server stored-procedures


【解决方案1】:

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

尝试在您的存储过程中注释SET NOCOUNT ON。 这将返回受影响的行数。我希望这能帮助您解决问题。

【讨论】:

  • 我的 sp 中没有设置 SET NOCOUNT ON。
  • SET NOCOUNT ON 不用于此目的。当您运行查询时,SSMS 会为您提供已影响的行数的详细信息。设置 nocount 将阻止该消息,因为这仅在您直接执行查询时有用。
【解决方案2】:

您可以使用 SQL Profiler 检查从应用程序发送到 SQL Server 的带有参数的查询。

或者,您可以使用两个输出变量并检查其值以确保参数正确发送,至少是在@ResponseMessage 参数中附加参数值并在调用ExecuteNonQuery 后检查其值方法

【讨论】:

  • 我可以从上面的 SP 中返回 @ResponseMessage
猜你喜欢
  • 2019-10-31
  • 2012-01-25
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多