我正在尝试创建一个简单的按钮,单击该按钮时,会向相关列添加1。我使用下拉框选择ID,然后将值加1。但是,我收到了错误:
类型' System.Data.SqlServerCe.SqlCeException'的第一次机会异常。发生在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 :(得分: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有更好的详细解答,可能有助于启发你的思想...
答案 1 :(得分:2)
"UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = '" + comboBox1.Text + "'"
需要使用'in query?
关闭字符串参数答案 2 :(得分:1)
你需要考虑下面的事情;
使用后请处理命令。
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:代码未经过测试。