根据下面的SQL查询,我需要获取一个数字值2083.10,但是当尝试使用该代码从dbreader获取int值时,它将只有2083。demical
不见了。>
string SQLCash = @"SELECT sum(t2.Cash-Change) AS Cash
FROM dbFBHdr t1, dbFBCollection t2
WHERE t1.Branch = t2.Branch
AND t1.CashNo = t2.CashNo
AND t1.CashDate >= '" + PDC.DateFrom + "' " +
"AND t1.CashDate <= '" + PDC.DateTo + "' " +
"AND t1.Status = 'CLOSED'";
FbCommand cmdCASH = new FbCommand(SQLCash, FbCon);
cmdCASH.ExecuteNonQuery();
FbDataReader readerCASH = cmdCASH.ExecuteReader();
while (readerCASH.Read() == true)
{
if (readerCASH["Cash"].ToString() == "")
{
PDC.CASH = "0";
}
else
{
PDC.CASH += String.Format("{0:n}",readerCASH["Cash"]);
PDC.TOCASH = readerCASH.GetInt32(readerCASH.GetOrdinal("Cash"));
}
}
这是我用来从SQL获取Int值的代码
PDC.TOCASH = readerCASH.GetInt32(readerCASH.GetOrdinal("Cash"));
答案 0 :(得分:0)
由于您需要以Decimal
对象的形式获取值,因此您需要使用SqlDataReader.GetDecimal(Int32)
方法:
readerCASH.GetDecimal(readerCASH.GetOrdinal("Cash"));
因为GetInt32
方法将以32位带符号整数形式获取值。另外,您需要将TOCASH
的类型更改为十进制。另外,您应始终使用parameterized queries来避免SQL Injection。像这样:
AND t1.CashDate >= @DateFrom
yourCommand.Parameters.AddWithValue("@DateFrom", PDC.DateFrom);
//And other parameters also
尽管直接指定类型并使用Value
属性比AddWithValue
更好。看到这个https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
答案 1 :(得分:0)
如果您想获得GetInt32
的价值,请不要使用decimal
,请使用GetDecimal
PDC.TOCASH = readerCASH.GetDecimal(readerCASH.GetOrdinal("Cash"));
答案 2 :(得分:0)
如果您不确定将哪种 .Net 类型映射到初始的 RDBMS 类型(例如Number(16, 4) -> ?
,它将是{ {1}},Single
或Double
?),您可以尝试转换:
Decimal
答案 3 :(得分:0)
您正在将其格式化为不带逗号,因此它将以整数形式返回
PDC.CASH += String.Format("{0:n2}",readerCASH["Cash"]);
n2表示逗号后还有2位数字,如果您使用的是货币,我建议您使用{0:c2}