当 DELETE 命令似乎工作正常时,表中的值不会被删除

Posted

技术标签:

【中文标题】当 DELETE 命令似乎工作正常时,表中的值不会被删除【英文标题】:Values are not getting deleted in a table when DELETE command seems to be working fine 【发布时间】:2014-11-26 14:18:17 【问题描述】:

我为一个组织开发了管理系统。我的表单中有很多数据网格视图。对于每个删除操作,我都有相同的命令(在相应的单元格内容单击事件中),如下所示。在一个地方它工作得很好,值正在从表中删除。但是在另一个表中,当我单击名为删除的 datagridview 中的按钮时,因此在单元格内容单击事件中,我应该从数据库中删除该实体的记录。单击时,行被删除,但是当我打开我的数据库时,值仍然存在。

我的代码在这里:

    private void data_grid2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        
            // Result's tab's Gridview
            int m = 0;
            int currentRow = int.Parse(e.RowIndex.ToString());
            try
            
                string name = data_grid2.CurrentRow.Cells["RollNo"].Value.ToString();
                m = int.Parse(name);
            
            catch (Exception ex) 
            
                throw;
            

            if (data_grid2.Columns[e.ColumnIndex] == editButton && currentRow >= 0)
            

            

            else if (data_grid2.Columns[e.ColumnIndex] == deleteButton && currentRow >= 0)
            
                string queryDeleteString = "DELETE * FROM finalResult where RollNo = " + m + "";
                OleDbCommand sqlDelete = new OleDbCommand();
                sqlDelete.CommandText = queryDeleteString;
                sqlDelete.Connection = database;
                sqlDelete.ExecuteNonQuery();
                string queryString = "SELECT RollNo, RegYear, faculty, program, examNature, finalmarksObt, totalMarks, Percentage FROM finalResult";
                loadResults(queryString);

            

幕后可能出了什么问题?

【问题讨论】:

你的连接字符串是什么?您是否使用快捷方式 DataDirectory?如果是,您是否在项目文件之间列出了 MDB 文件,并将“复制到输出目录”设置为“始终复制”? string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=RAIMS.accdb 好吧,这意味着您使用的数据库位于应用程序的同一启动路径中。在 Visual Studio 中,这是 BIN\DEBUG 文件夹。您是否在项目文件之间列出了您的 ACCDB 文件?如果是,它的属性复制到输出目录是什么? 先生,它被设置为始终复制。 复制总是意味着每次运行 VS 的调试会话时,VS 都会将原始 ACCDB 文件从项目文件夹复制到 BIN\DEBUG。销毁上一个会话所做的更改。通常项目文件夹中的文件已准备好部署,其中包含您需要发送给客户的基本数据。 BIN\DEBUG 中的一个是您的工作数据。将属性更改为Copy if Newer。因此,只有当您更改架构或数据时,它才会被复制到 bin\debug。请注意,如果您不进行任何更改,Access 也会在打开它时更改其文件戳 【参考方案1】:

我的Access有点生疏了,不过我相信delete语法还是和Sql Server一样

string queryDeleteString = "DELETE * FROM finalResult where RollNo = " + m + "";

您的语法无效,因为您试图删除 *.它只是删除。

string queryDeleteString = "DELETE FROM finalResult where RollNo = " + m + "";

顺便说一句,这段代码对于sql注入来说已经成熟了。

【讨论】:

感谢您的关心,先生,但它不能正常工作。您能告诉我这可能是由于我的数据库所在文件夹的权限受到干扰引起的吗? 是的,我肯定会用反sql注入技术屏蔽它先生。非常感谢您指出这一点。 您是否验证过 m 是您认为它是并且存在于数据库中的想法? 是的,先生,我已经验证过了。现在我已经删除了一个数据库并复制了一个我为备份而创建的新数据库。现在它工作正常。我认为我还在我的项目中添加了数据源,因为我有两个数据库文件。我认为可能两者都有冲突。不是吗? 真的没有足够的信息让我知道。也就是说,很高兴它似乎对你有用:)

以上是关于当 DELETE 命令似乎工作正常时,表中的值不会被删除的主要内容,如果未能解决你的问题,请参考以下文章

GWT 项目在部署时不会从 RPC 加载数据

使用 Combobox 控制表单

Xcode 中的设备方向似乎无法正常工作

当没有附加控制台时,python 子进程似乎无法正常工作

视图未绑定架构?

UITableViewCell EditingStyle Delete 无法正常工作