2013-02-21 240 views
1

我取回一些數據DROM SQLite數據庫表&我用下面的代碼: -SQLite數據庫查詢異常處理

try 
{ 
    for (double i = 10; i < 100; i++) 
    { 
    // Read in value 
    cmd.CommandText = "SELECT Value FROM Data WHERE Value like '" + i + "'"; 
    Digit_Value = Convert.ToDouble(cmd.ExecuteScalar()); 
    } 
catch (Exception) 
{ 
    throw; 
} 

的要求,直到它擊中在數據庫表中的Null,然後的所有作品拋出異常。

當異常被拋出時,我需要將值0.00賦值給變量Digit_Value &例程應該繼續到下一條記錄。衆多谷歌搜索發現沒有任何工作 - 任何指針? (?或爲DBNull)

+0

哪裏拋出異常和哪個異常? – 2013-02-21 21:36:51

+2

作爲編碼技巧,您需要嘗試並避免構建像這樣的SQL查詢。請圍繞參數化查詢提供Google。 – Bridgey 2013-02-21 21:39:11

+1

如果你所做的只是'catch(Exception){throw; '',不要打擾嘗試抓住。 – 2013-02-21 21:41:07

回答

0

如果的ExecuteScalar()方法返回null,則需要檢測,試圖將其分配到Digit_Value前:

cmd.CommandText = "SELECT Value FROM Data WHERE Value like '" + i + "'"; 
object o = cmd.ExecuteScalar(); 
if(o == Null) { 
    throw new Exception("Got null"); 
} else { 
    Digit_Value = Convert.ToDouble(o); 
} 
+1

@RoadBump它也可以返回'DBNull.Value',如果選擇的值是'NULL'。 – 2013-02-21 22:02:33

0

ExecuteScalar返回第一行的第一個單元格中查詢(MSDN Reference)。

鑑於此,只需修改您的查詢到這一點:

SELECT Value FROM Data WHERE Value like '@value' UNION select 0 
0

如果不使用通配符與LIKE然後使用=代替。

try 
{ 
    cmd.Parameters.Add("@val", SqlDbType.Int32); 
    cmd.CommandText = "SELECT Value FROM Data WHERE Value = @val"; 

    for (double i = 10; i < 100; i++) 
    { 
    // Read in value 
    cmd.Parameters["@val"].Value = i; 
    object res = cmd.ExecuteScalar(); 
    double? Digit_Value = DBNull.Value.Equals(res) ? null : Convert.ToDouble(res); 
    } 
catch (Exception) 
{ 
    throw; 
}