+1使用SQL Server Compact 4.0转换为数据列
本文关键字:转换 数据 使用 SQL Server Compact | 更新日期: 2023-09-27 18:29:44
我正在尝试创建一个简单的按钮,当单击该按钮时,会将1添加到相关列中。我使用下拉框来选择ID,然后在值上加1。然而,我遇到了一个错误:
System.Data.SqlServerCe.dll 中首次出现"System.Data.SqlServerCe.SqlCeException"类型的异常
并突出显示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");
}
}
"UPDATE fixedBugs SET Success = Success + 1 WHERE Fixed_ID = '" + comboBox1.Text + "'"
是否需要关闭查询中带有"的字符串参数?
您的命令有一个未关闭的开头撇号。这应该能解决问题。
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);
这将防止将来的头痛。
这个问题有更详细的答案,可能有助于启发你的思维。。。
您需要考虑以下事项;
- 用户必须选择一个值
- 安全性
使用命令后对其进行处置。
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:代码未经过测试。