ExecuteNonQuery () ERRORE -> La conversione del valore nvarchar '3.955.811,801 mila' straripato una colonna int.
-
12-10-2019 - |
Domanda
Il mio codice è il seguente:
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();
}
}
il mio SP è in questo modo:
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
e l'errore è in linea (_cmd.ExecuteNonQuery ();):
Errore:
Sys.WebForms.PageRequestManagerServerErrorException: La conversione di il valore nvarchar '3955811801' traboccato una colonna int. Il Procedura 'sp_Noskheh_SumOfTotalPay' ha tentato di restituire uno stato di NULL, che non è consentito. Uno stato di 0 verrà restituito al posto.
La prego mi aiuto per capire questo problema?
Soluzione
Si sta tentando di convertire un valore nvarchar ad un int
La dichiarazione Return
deve essere un numero intero.
Provare a cambiare il vostro approccio e nella vostra Stored Proc fare
Select @Sum
invece di return @sum
Poi, invece di utilizzare l'uso ExecuteNonQuery
ExecuteScalar
String result = (String)cmd.ExecuteScalar();
lblSumTotalPayShow.Text = result.ToString();
Altri suggerimenti
-
Cambia @Co_ID a bigint. 3955811801 è superiore quindi 2 ^ 31-1 -
la somma è maggiore di 2 ^ 31-1. Il ritorno prova a convertirlo in int e non riesce. Utilizzare un parametri OUTPUT o semplicemente restituire un set di record.
Ti piace questa ??p>
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
Se il problema non è la @Co_ID come altri indicano, allora forse il SUM(TotalPay)
potrebbe essere uguale al valore di 3,9 miliardi. se la colonna TotalPay è un numero intero, il SUM è intero prima della conversione in varchar.