2016-08-16 1 views
0

Der Wert von dt.Rows.Count ist immer gleich 1 und der Wert von dt.Rows [0] [0] und dt.Rows [0] [ 1] ist eine leere Zeichenfolge, wenn ich sqlStr ohne Datensätze abfrage.C# Datentabelle Zeilenwert ist eine leere Zeichenfolge, aber es gibt den Nullwert

Aber ich führe sqlStr in der Datenbank aus. Es ist null. Here is the database screenshot Ich weiß nicht, warum es so ist.

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

das sieht so aus als gäbe es keine Zeilen .. – BugFinder

+2

Ich würde * starten *, indem ich die SQL-Injection-Angriffsschwachstelle (oder zumindest die Konvertierungsfragilität) behebe, die Sie dort hinbringen. Verwenden Sie parametrisiertes SQL, * immer *. –

+0

Sie erhalten immer eine Zeile, da SUM() immer etwas zurückgibt. –

Antwort

-1

dieses Ziel erreichen Sie Ihre Abfrage ändern können, und wenn Fall von ‚Summe von Nullen‘, ist der Rückgabewert 0:

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 
... 

So würden Sie 0 als Rückgabewert haben für die Felder.

+0

Danke^_^Es funktioniert! und ich finde IFNULL funktioniert auch gleich wie COALESCE in mysql. – figureout77

+0

Ja, IFNULL funktioniert auch! – Alvimar

Verwandte Themen