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

本文关键字:记录 有错误 Access OleDbAdapter MS 删除 | 更新日期: 2023-09-27 18:32:43

>我正在尝试删除包含数据网格视图中显示的匹配文本的记录。我把字符串弄对了,似乎没有任何问题,但没有删除任何记录。

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();

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

尝试删除 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);

我会尝试使用以下语法。 使用块确保您正在清理连接/命令。

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();
            }
        }

当然,您需要添加尝试/捕获块以及包装交易才能完成,但这应该为您提供一个开始的地方。