0

Мой код, как показано ниже:ExecuteNonQuery() ERROR -> Преобразование значения 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? –

ответ

0

Вы пытаетесь преобразовать значение NVARCHAR в int

The Return statement must be an integer.

Попробуйте изменить свой подход и в вашей ХП сделать

Select @Sum вместо return @sum

Тогда вместо того, чтобы использовать ExecuteNonQueryExecuteScalar

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

может учесть больше // в моем sp. Выберите @Sum. // что именно я должен изменить в sp и code за – LostLord

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 Not Co_ID – LostLord

+0

@LostLord: код трудно следовать ... см. Мою точку 2 – gbn

+0

Я работал над этой ошибкой много часов/я ее ненавижу ... – LostLord

0

Если проблема не @Co_ID, как другие указывают, то, возможно, SUM(TotalPay) может быть равна вашей 3,9 млрд стоимости. если столбец TotalPay является целым числом, SUM является целым числом перед преобразованием в varchar.