MS Access,OleDbAdapter不删除记录但没有错误

时间:2012-05-01 00:10:56

标签: c# ms-access oledbdataadapter

我正在尝试删除包含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();

2 个答案:

答案 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块以及在事务中包装才能完成,但是这应该给你一个开始的地方。