executenonquery()エラー - > nvarchar値の変換 '3955811801' 'int列がオーバーフローされました。
-
12-10-2019 - |
質問
私のコードは以下に示されています:
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のステータスが返されます。
この問題を理解するのを手伝ってくれませんか?
解決
あなたはnvarchar値をに変換しようとしています int
あなたのアプローチを変更してみてください、そしてあなたの保存されたprocで
Select @Sum
それ以外の return @sum
その後、使用する代わりに ExecuteNonQuery
使用する ExecuteScalar
String result = (String)cmd.ExecuteScalar();
lblSumTotalPayShow.Text = result.ToString();
他のヒント
@co_idをbigintに変更します。 3955811801は2^31-1よりも高くなっています合計は2^31-1を超えています。リターンはそれをintに変換しようとし、失敗します。出力パラメーターを使用するか、レコードセットを返します。
このような
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
問題が他の人が示すように@CO_IDではない場合、多分 SUM(TotalPay)
39億の価値に等しいかもしれません。 TotalPay列が整数である場合、varcharに変換する前の合計は整数です。
所属していません StackOverflow