2016-08-16 4 views
0

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; 
} 
+0

このような行はありません。 – BugFinder

+2

私はSQLインジェクション攻撃の脆弱性(または少なくとも変換の脆弱性)を修正することで*始めることにしました。パラメータ化されたSQL * always *を使用します。 –

+0

SUM()は常に何かを返すので、常に行を取得します。 –

答えて

-1

あなたのクエリを変更することができますし、「ヌルの合計」の場合は、戻り値が0であれば、この目標を達成するために、フィールドのために。

+0

ありがとう^ _ ^それは動作します! IFNULLもmysqlのCOALESCEと同じように動作することがわかりました。 – figureout77

+0

はい、IFNULLも動作します! – Alvimar

関連する問題