我正在尝试删除包含datagridview中显示的匹配文本的记录。我得到的字符串没问题,似乎没有出错,但没有一条记录被删除。
String text;
int i = dataGridView1.CurrentRow.Index;
text = (string)dataGridView1[0, i].Value.ToString();
String deleteSql = "DELETE FROM [Sugg] WHERE sugg_text='"+text+"'";
MessageBox.Show(text);
if (MessageBox.Show("Are you sure you want to delete this suggestion?", "Title", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
oleDbConnection1.Open();
oleDbDataAdapter1.DeleteCommand = oleDbConnection1.CreateCommand();
oleDbDataAdapter1.DeleteCommand.CommandText = deleteSql;
oleDbDataAdapter1.DeleteCommand.ExecuteNonQuery();
oleDbConnection1.Close();
答案 0 :(得分:1)
尝试删除try / catch块以查看是否确实没有错误。
您没有收到错误这一事实可能意味着text
变量的内容不好,或者错误在try / catch块中丢失。 (我们无法完全看到)
正如Tim所说,不是直接在SQL语句中插入text
值,而是使用命令参数来处理这些事情。它可以防止意外事件发生,例如text
内的撇号。
String deleteSql = "DELETE FROM [Sugg] WHERE sugg_text=@SUGG_TEXT";
var cmd = oleDbConnection1.CreateCommand();
cmd.CommandText = deleteSql;
cmd.Parameters.AddWithValue("SUGG_TEXT", text);
答案 1 :(得分:0)
我会尝试使用以下语法。使用块确保您正在清理连接/命令。
public void TestMethod()
{
string connectionstring = "someconnectionstring";
string deletesql = "delete from table where something = somethingelse";
using(OleDbConnection con = new OleDbConnection(connectionstring))
{
con.Open();
using(OleDbCommand com = new OleDbCommand(deletesql, con))
{
com.ExecuteNonQuery();
}
con.Close();
}
}
当然你需要添加你的try / catch块以及在事务中包装才能完成,但是这应该给你一个开始的地方。