0

我的代碼,如下所示:ExecuteNonQuery()錯誤 - > nvarchar值'3955811801'的轉換溢出了一個int列。

using (SqlConnection _conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DarmanConnectionString"].ToString())) 
{ 
    using (SqlCommand _cmd = new SqlCommand("dbo.sp_Noskheh_SumOfTotalPay", _conn)) 
    { 
     _cmd.CommandType = CommandType.StoredProcedure; 
     _cmd.Parameters.Add(new SqlParameter("@Co_ID", int.Parse(Session["Co_ID"].ToString()))); 

     _cmd.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.NVarChar)); 
     _cmd.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue; 

     _conn.Open(); 
     _cmd.ExecuteNonQuery(); 

     Int64 result = Int64.Parse(_cmd.Parameters["@RETURN_VALUE"].Value.ToString()); 
     lblSumTotalPayShow.Text = result.ToString(); 

      _conn.Close(); 
     } 
    } 

我的SP是這樣的:

create Procedure [dbo].[sp_Noskheh_SumOfTotalPay] 
    @Co_ID int 
As  
    ----------------- 
    Declare @Sum nvarchar(50) 
    -----------------  
BEGIN 
    Select @Sum = convert(nvarchar(50), SUM(TotalPay)) 
    From Noskheh 
    Where (Co_ID = @Co_ID) 

    Return @Sum 
END 

和誤差是在線路(_cmd.ExecuteNonQuery();):

錯誤:

Sys.WebForms.PageRequestManagerServerErrorException: The conversion of the nvarchar value '3955811801' overflowed an int column. The 'sp_Noskheh_SumOfTotalPay' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.

請你幫我弄清楚這個問題嗎?

+0

Noskheh.Co_ID的數據類型是什麼? @Co_ID = 3955811801? – 2010-12-20 20:15:45

回答

0

您嘗試將nvarchar的值轉換爲int

The Return statement must be an integer.

試着改變你的方法,並在你的存儲過程做

Select @Sum而不是return @sum

然後,而不是使用ExecuteNonQuery使用ExecuteScalar

String result = (String)cmd.ExecuteScalar(); 
lblSumTotalPayShow.Text = result.ToString(); 
+0

可以ü擴大/ /在我的SP選擇@SUM存在//究竟應該改變後面的sp和代碼 – LostLord 2010-12-20 20:38:31

3
  1. 將@Co_ID更改爲bigint。 3955811801高於2^31-1

  2. SUM大於2^31-1。 RETURN嘗試將其轉換爲int並失敗。 使用OUTPUT參數或只返回記錄集。

像這樣

create Procedure [dbo].[sp_Noskheh_SumOfTotalPay] 
@Co_ID int, 
@Sum nvarchar(50) OUTPUT --or bigint? 
As 

BEGIN 
Select 
    @Sum = convert(nvarchar(50), SUM(TotalPay)) 
From Noskheh 
    Where 
    (Co_ID = @Co_ID) 
END 

create Procedure [dbo].[sp_Noskheh_SumOfTotalPay] 
@Co_ID int 
As 

BEGIN 
Select 
    SUM(TotalPay) AS SumTotalPay 
From Noskheh 
    Where 
    (Co_ID = @Co_ID) 
END 
+0

爲什麼Co_ID ?????? 3955811801填充@Sum不Co_ID – LostLord 2010-12-20 20:16:45

+0

@LostLord:代碼很難遵循...看我的觀點2 – gbn 2010-12-20 20:18:03

+0

我曾在這個錯誤上工作了很多小時/我討厭它... – LostLord 2010-12-20 20:19:09

0

如果問題不是@Co_ID爲他人指示,那麼也許SUM(TotalPay)可能等於你的3.9十億價值。如果TotalPay列是整數,那麼在轉換爲varchar之前,SUM是整數。

相關問題