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();
尝试删除 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();
}
}
当然,您需要添加尝试/捕获块以及包装交易才能完成,但这应该为您提供一个开始的地方。