2016-10-11 16 views
0

私はASP.NET MVCアプリケーションを開発しています。私はストアドプロシージャを持っています。私はストアドプロシージャにいくつかの値を送信したい。以下は、値は常に0ですストアドプロシージャが正しく実行されることを確認するには?

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

は私がCorporateIdCitizenIdDocType@Revertの値を送信するために必要なパラメータがあります。文書を挿入するときに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

私は私のspでSET NOCOUNTを入れていませんでした。 –

+0

この目的で 'SET NOCOUNT ON'は使用されません。クエリを実行すると、SSMSは有効な行数の詳細を提供します。 nocountをonに設定すると、そのメッセージが表示されなくなります。クエリが直接実行されている場合にのみ役立ちます。 – vivek

0

SQLプロファイラを使用して、アプリケーションからSQL Serverに送信されたクエリを検査できます。

それとも、あなたは最低で@ResponseMessageパラメータのパラメータ値を追加し、ExecuteNonQuery方法

のために呼び出した後、その値をチェックすることです、2つの出力変数を使用してparametresが正しく送信されたことを確認するために、その値を調べることができます
+0

上記のSPから@ResponseMessageを返すことができました –

関連する問題