2012-12-17 50 views
2

我正在運行帶硬編碼值的存儲過程。該命令成功執行,沒有任何錯誤。但是數據並沒有在數據庫中更新。如果我用SQL Server運行該存儲過程,數據正在更新。我的錯誤是什麼?這個存儲過程爲什麼不更新數據庫中的數據?

C#代碼

using (SqlTransaction sqlTrans = con.BeginTransaction()) 
{ 
    using (SqlCommand AdjustTax = new SqlCommand("GP_SOP_AdjustTax", con, sqlTrans)) 
    { 
     try 
     { 
      AdjustTax.CommandType = CommandType.StoredProcedure; 
      AdjustTax.Parameters.Add("@IN_SOPType", SqlDbType.Int).Value = 3; 
      AdjustTax.Parameters.Add("@IN_SOPNo", SqlDbType.VarChar).Value = "stdinv2278"; 
      AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Int).Value = 0.04; 
      AdjustTax.Parameters.Add("@O_iError", SqlDbType.Int, 250); 
      AdjustTax.Parameters["@O_iError"].Direction = ParameterDirection.Output; 

      if (con == null || con.State == ConnectionState.Closed) 
      { 
       con.Open(); 
      } 

      AdjustTax.ExecuteNonQuery(); 
      int Error = (int)AdjustTax.Parameters["@O_iError"].Value; 

      if (Error == 0) 
      { 
       MessageBox.Show("Tax is Adjusted"); 
      } 
      if (Error != 0) 
      { 
       MessageBox.Show("Error No:" + Error1); 
      } 

      sqlTrans.Commit(); 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
      sqlTrans.Rollback(); 
     } 

     finally 
     { 
      con.Close(); 
     } 
    } 
} 

SQL Server代碼

DECLARE @return_value int, 
     @O_iError int 

EXEC @return_value = [dbo].[GP_SOP_AdjustTax]  
     @IN_SOPType = 3, 
     @IN_SOPNo = 'stdinv2278',  
     @IN_AdjustAmount = 0.04,  
     @O_iError = @O_iError OUTPUT 

SELECT @O_iError as N'@O_iError' 

SELECT 'Return Value' = @return_value 

GO 
+1

請證實有關即@IN_AdjustAmount – TechDo

+0

感謝答覆第三個輸入參數的DB int類型。類型是numaric – Kavitha

+0

如果類型是numaric ..那麼哪種類型有我設置在C#代碼。 – Kavitha

回答

2

我認爲這個問題是由這一行造成的:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Int).Value = 0.04; 

由於類型爲SqlDbType.Int,你是路過在0.04中,該值最有可能四捨五入爲0.沒有看到實際存儲過程的內容edure,我只能猜測,爲該參數傳遞值爲0或者導致存儲過程跳過更新,或者存儲過程確實會導致列中的計算結果更新爲原來的相同值。

我會嘗試改變該行:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04M 

編輯
Decimal對於Numeric SQL類型正確映射,如explained here

+0

讓我知道你爲什麼包括'M'(0.04M)。 – Kavitha

+0

'M'只是意味着'小數'。請參閱此處:http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.100).aspx – rsbarro

2

嘗試SqlDbType.Decimal:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04; 
相關問題