我的代码如下所示:
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:转换 nvarchar值'3955811801'溢出了一个int列。该 'sp_Noskheh_SumOfTotalPay'过程尝试返回状态 NULL,这是不允许的。将返回状态0。
请你帮我解决这个问题吗?
答案 0 :(得分:3)
将@Co_ID更改为bigint。 3955811801高于2 ^ 31-1
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
答案 1 :(得分:0)
如果问题不是其他人指出的@Co_ID,那么SUM(TotalPay)
可能等于你的39亿价值。如果TotalPay列是整数,则在转换为varchar之前,SUM是整数。
答案 2 :(得分: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();