ExecuteNonQuery () ERROR -> La conversión del valor nvarchar '3955811801' desbordó una columna int.
-
12-10-2019 - |
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?
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
-
Cambiar @Co_ID a bigint. 3955811801 es superior a 2 ^ 31-1 -
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.