Pregunta

Mi código es como se muestra a continuación:

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();
        }
    }

mi SP es la siguiente:

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

y el error está en línea (_cmd.ExecuteNonQuery ();):

Error:

Sys.WebForms.PageRequestManagerServerErrorException: La conversión de el valor nvarchar '3955811801' desbordó una columna int. los procedimiento 'sp_Noskheh_SumOfTotalPay' intentó devolver un estado de NULL, que no está permitido. Un estado de 0 será devuelto en su lugar.

¿Me ayudan a descubrir este problema?

¿Fue útil?

Solución

Está intentando convertir un valor nvarchar a una int

La declaración Return debe ser un entero.

Trate de cambiar su enfoque y en su procedimiento almacenado hacer

Select @Sum en lugar de return @sum

A continuación, en lugar de utilizar el uso ExecuteNonQuery ExecuteScalar

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

Otros consejos

  1. Cambiar @Co_ID a bigint. 3955811801 es superior a 2 ^ 31-1

  2. La suma es mayor que 2 ^ 31-1. El retorno intenta convertirlo a int y falla. Utilice un parámetros de salida o simplemente devolver un conjunto de registros.

Al igual que este

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

o

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

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

Si el problema no es la @Co_ID como otros indican, entonces tal vez el SUM(TotalPay) podría ser igual a su valor de 3,9 mil millones. si la columna TotalPay es un número entero, la suma es número entero antes de la conversión a varchar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top