0

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

2 回答 2

1

尝试删除 try/catch 块,看看是否真的没有错误。

您没有收到错误的事实可能意味着您的text变量的内容是错误的,或者错误在您的 try/catch 块中丢失了。(我们无法完全看到)

正如蒂姆所说,不要text直接在 SQL 语句中插入你的值,而是使用命令参数来处理这些事情。它将防止意外的事情发生,例如text.

String deleteSql = "DELETE FROM [Sugg] WHERE sugg_text=@SUGG_TEXT";
var cmd = oleDbConnection1.CreateCommand();
cmd.CommandText = deleteSql;
cmd.Parameters.AddWithValue("SUGG_TEXT", text);
于 2012-05-01T06:40:39.423 回答
0

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

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 块以及包装事务才能完成,但这应该为您提供一个开始的地方。

于 2012-05-01T02:20:25.447 回答