2016-01-08 30 views
0

我正在嘗試創建一個簡單按鈕,單擊該按鈕時,會將1添加到相關列。我使用下拉框選擇ID,然後將值加1。不過,我提出與錯誤:使用SQL Server Compact 4.0對數據列+1 +1

A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll

和它突出cm.ExecuteNonQuery();

我已經經歷了多次嘗試在此消失,但它讓我有點困惑,爲什麼我不能簡單地運行SQL聲明。

這裏是

private void button2_Click(object sender, EventArgs e) { 
    try { 
     SqlCeCommand cm = new SqlCeCommand("UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = '" + comboBox1.Text, mySqlConnection); 
     cm.ExecuteNonQuery(); 
    } catch (SqlCeException) { 
     MessageBox.Show("Error"); 
    } 
} 
+0

刪除撇號只是掛在那裏... –

+0

''「+ comboBox1.Text' - 你有一個額外的撇號或你需要關閉一個 - 取決於數據類型。參數化查詢 - 更安全 – sgeddes

+0

不要吃這個異常,將該消息改爲'MessageBox.Show(ex.ToString());'。 –

回答

2

你的命令有一個開口撇號未閉合的代碼。這應該解決它。

SqlCeCommand cm = new SqlCeCommand("UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = '" + comboBox1.Text + "'", mySqlConnection); 

但是,這是一個安全問題,因爲用戶可以管理額外的命令添加到您的查詢,這可能會毀掉你的整個數據庫。

這是一個更好的解決方案,因爲使用參數更安全。

SqlCeCommand cm = new SqlCeCommand("UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = @fixedid;", mySqlConnection); 
cm.Parameters.AddWithValue("@fixedid", comboBox1.Text); 

這將防止未來的麻煩。

This question具有更好的詳細解答,可以幫助啓發你的心...

+0

這是一個不好的答案。那麼安全問題呢? –

+2

那麼我指出他的錯誤,安全問題是我可以添加的答案,但他問的是錯誤。 – Phiter

+0

這已解決了錯誤 - 但沒有任何被輸入到數據庫中 –

2
"UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = '" + comboBox1.Text + "'" 

需要查詢與關閉字符串參數「?

1

你需要考慮下面的事情;

  1. 用戶必須選擇一個值。
  2. 安全
  3. 在使用它之後解決命令。

    string selectedValue = comboBox1.Text; 
        if (string.IsNullOrEmpty(selectedValue)) 
        { 
         MessageBox.Show("Please select something"); 
         return; 
        } 
        string sql = "UPDATE fixedBugs SET Success = ISNULL(Success,0) + 1 WHERE Fixed_ID = @selectedValue"; 
        try 
        { 
         using (SqlCeCommand cm = new SqlCeCommand(sql, mySqlConnection)) 
         { 
          SqlCeParameter param = new SqlCeParameter("@selectedvalue", SqlDbType.NText); 
          cm.Parameters.Add(param); 
          cm.Parameters["@selectedvalue"].Size = 50; 
          cm.Parameters["@selectedvalue"].Value = selectedValue.Trim(); 
          cm.ExecuteNonQuery(); 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.Message); 
        } 
    

PS:代碼未經測試。

相關問題