dt.Rows.Countの値は常に1に等しく、dt.Rows [0] [0]とdt.Rows [0] [ 1]はレコードがないsqlStrを照会すると空文字列です。C#データテーブル行の値は空文字列ですが、NULL値があります
しかし、データベースでsqlStrを実行します。それはnullです。 Here is the database screenshot なぜそれがわからないのですか?
string sqlStr = "select COALESCE(SUM(userIncome), 0), COALESCE(SUM(userSpend), 0) from tb_billlist where userPhone = '" + userPhone + "' and " +
"billTime between '" + beginDate + "' and '" + endDate + "'";
//execute sql
...
したがって、あなたは戻り値として0を持っているでしょう:
string sqlStr = "select SUM(userIncome),SUM(userSpend) from tb_billlist where userPhone = '" + userPhone + "' and " +
"billTime between '" + beginDate + "' and '" + endDate + "'";
//execute sql
DataTable dt = new DataTable();
dt = MysqlHelper.ExecuteDataTable(sqlStr);
if (dt.Rows.Count > 0)
{
userBillInfo.userAllIncome = (float.Parse)(dt.Rows[0][0].ToString());
userBillInfo.userAllSpend = (float.Parse)(dt.Rows[0][1].ToString());
}
else
{
userBillInfo.userAllIncome = 0;
userBillInfo.userAllSpend = 0;
}
このような行はありません。 – BugFinder
私はSQLインジェクション攻撃の脆弱性(または少なくとも変換の脆弱性)を修正することで*始めることにしました。パラメータ化されたSQL * always *を使用します。 –
SUM()は常に何かを返すので、常に行を取得します。 –