executenonquery()エラー - > nvarchar値の変換 '3955811801' 'int列がオーバーフローされました。

StackOverflow https://stackoverflow.com/questions/4493467

質問

私のコードは以下に示されています:

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

Return ステートメントは整数でなければなりません。

あなたのアプローチを変更してみてください、そしてあなたの保存されたprocで

Select @Sum それ以外の return @sum

その後、使用する代わりに ExecuteNonQuery 使用する ExecuteScalar

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

他のヒント

  1. @co_idをbigintに変更します。 3955811801は2^31-1よりも高くなっています

  2. 合計は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に変換する前の合計は整数です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top