![](/img/trans.png)
[英]How to read different type of out parameters from oracle stored procedure?
[英]OverflowException when getting out parameters from a stored procedure
我有一個商店程序。 從這里我想要輸出值,但顯示以下錯誤:
System.OverflowException:對於Int32,值太大或太小。
我的商店程序
ALTER proc dbo.[RECnoofDue]
@acno varchar(100),
@NoofDue numeric(18,2) output
as
Begin
select @NoofDue=isnull(SUM(Avgr),0) from (
select NoOfDue, LHEMI, TotalEMIDue, sunday, Avgr from
(SELECT COUNT(LHID) AS NoOfDue, LHEMI, SUM(LHEMI) AS TotalEMIDue,
SUM((Case when LHSundryBalance is null then 0 else LHSundryBalance end)) AS sunday,
((SUM(LHEMI)-SUM((Case when LHSundryBalance is null then 0 else LHSundryBalance end))) / LHEMI) AS Avgr
FROM dbo.TblLoanHistory WHERE (LHAcNo = @acno) AND
(LHEMIPaid = 0 OR LHEMIPaid IS NULL)AND (LHFileStatus IS NULL) GROUP BY LHSundryBalance, LHEMI,LHFileStatus ) x
union
(SELECT COUNT(LHID) AS NoOfDue, LHEMI, SUM(LHTotalOverDue) AS TotalEMIDue,
SUM((Case when LHSundryBalance is null then 0 else LHSundryBalance end)) AS sunday,
((SUM(LHTotalOverDue)-SUM((Case when LHSundryBalance is null then 0 else LHSundryBalance end))) / LHEMI) AS Avgr
FROM dbo.TblLoanHistory WHERE (LHAcNo = @acno) AND (LHEMIPaid = 0 OR LHEMIPaid IS NULL) AND
(LHFileStatus = 'BK')GROUP BY LHSundryBalance, LHEMI)) bb
end
我的ASP.NET C#代碼
private double NOofDueCount()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OptimaWebCustomerQueryCon"].ConnectionString))
using (SqlCommand cmd = new SqlCommand("dbo.RECnoofDue", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@acno", SqlDbType.Int);
cmd.Parameters.Add("@NoofDue", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Parameters["@acno"].Value = hfLoanAcNo.Value;
conn.Open();
cmd.ExecuteNonQuery();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
return Convert.ToDouble(cmd.Parameters["@NoofDue"].Value);
//int contractID = Convert.ToInt32(cmd.Parameters["@NoofDue"].Value);
}
}
conn.Close();
return 0;
}
}
嘗試使用decimal
( SqlDbType.Decimal
)而不是int
,並確保您的@acno
是一個string
,( SqlDbType.NVarChar
)
cmd.Parameters.Add("@acno", SqlDbType.NVarChar);
cmd.Parameters.Add("@NoofDue", SqlDbType.Decimal).Direction = ParameterDirection.Output;
...
return Convert.ToDecimal(cmd.Parameters["@NoofDue"].Value);
或者可能是double
( SqlDbType.Float
),由於您的方法返回double
,因此可能是原始意圖:
cmd.Parameters.Add("@acno", SqlDbType.NVarChar);
cmd.Parameters.Add("@NoofDue", SqlDbType.Float).Direction = ParameterDirection.Output;
...
double NoofDue = Convert.ToDouble(cmd.Parameters["@NoofDue"].Value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.