2017-07-27 54 views
0

我有一個數據庫查詢,當我在MySql中運行查詢時,它返回值。但我得到的對象不能從DBNULL轉換爲其他類型的異常,當我在代碼中運行它。我如何從代碼中檢索數據?對象不能從DBNull轉換爲其他類型? C#

public int getLatestReading(string connstr, string gId, string mId, DateTime date) 
    { 

     int active = 0; 
     MySqlConnection myconn = new MySqlConnection(connstr); 
     String sqlstr = "Select max(ar.ActualReading) From actualmeterreading ar Inner Join meterreadingrecords mr On mr.ActualMeterReadingID = ar.ID Inner join machinemeterreadinglist mml on mml.ID = ar.MachineMeterReadingId Inner join grouping g on g.ID = mml.Grouping inner join machines m on m.ID = mml.MachineID where g.ID = '" + gId + "' and m.ID = '" + mId + "' and mr.rDate > '" + date + "'"; 
     MySqlCommand cmd = new MySqlCommand(sqlstr, myconn); 
     myconn.Open(); 
     active = Convert.ToInt32(cmd.ExecuteScalar()); 
     myconn.Close(); 
     myconn.Dispose(); 
     return active; 
    } 
+0

https://stackoverflow.com/questions/870697/unable-to-cast-object-of-type-system-dbnull-to-type-system-string – Sujith

回答

2

請使用下面的代碼和平。

public int getLatestReading(string connstr, string gId, string mId, DateTime date) 
    { 

     int active = 0; 
     MySqlConnection myconn = new MySqlConnection(connstr); 
     String sqlstr = "Select max(ar.ActualReading) From actualmeterreading ar Inner Join meterreadingrecords mr On mr.ActualMeterReadingID = ar.ID Inner join machinemeterreadinglist mml on mml.ID = ar.MachineMeterReadingId Inner join grouping g on g.ID = mml.Grouping inner join machines m on m.ID = mml.MachineID where g.ID = '" + gId + "' and m.ID = '" + mId + "' and mr.rDate > '" + date + "'"; 
     MySqlCommand cmd = new MySqlCommand(sqlstr, myconn); 
     myconn.Open(); 
     active = !Convert.IsDBNull(cmd.ExecuteScalar())?Convert.ToInt32(cmd.ExecuteScalar()):0; 
     myconn.Close(); 
     myconn.Dispose(); 
     return active; 
    } 
0

解決此問題的一種方法是確保查詢從不返回空值。您可以通過更改這樣的查詢使用MySQL ifnull功能做到這一點:

Select ifnull(max(ar.ActualReading), 0) ... 
相關問題