从 Access 数据库中删除不存在的记录

Posted

技术标签:

【中文标题】从 Access 数据库中删除不存在的记录【英文标题】:Deleting a non-existent record from an Access database 【发布时间】:2018-01-09 21:33:36 【问题描述】:

当找到特定字符串(实体)时,我使用以下代码删除表中的一行。它工作正常,但如果数据库中不存在“实体”,它会失败。

using (OleDbConnection thisConnection = new OleDbConnection(connectionname))

    string deletequery = " DELETE FROM SFModelOutputVariables WHERE [Entity] = '" + ENTITY + "'";  
    OleDbCommand myAccessCommandDelete = new OleDbCommand(deletequery, thisConnection);
    try
    
        thisConnection.Open();
    
    catch(Exception ex)
    
        MessageBox.Show(ex.Message.ToString() + "\n" + "-Error found while " + "connecting to Access Database");
        return;
    

    myAccessCommandDelete.ExecuteNonQuery();
    thisConnection.Close();

当表中不存在所选实体的数据时,myAccessCommandDelete.ExecuteNonQuery(); 行出现错误。

【问题讨论】:

实际错误是什么? 使用参数避免sql注入和格式化错误。 是的,LarsTech 是正确的。这段代码非常狡猾,我可能会因为编写这样的代码而失去工作。您需要使用参数来避免 SQL 注入。 【参考方案1】:

您需要检查实体是否存在。如果实体存在则运行删除,但如果它不存在可能会向用户返回 404 或显示适当的消息。

    using (OleDbConnection thisConnection = new OleDbConnection(connectionname))
    

 string cmdStr = "Select count(*) from SFModelOutputVariables WHERE [Entity] = '" + ENTITY + "'"; 

 OleDbCommand cmd = new      OleDbCommand(cmdStr, thisConnection);

   int count = (int)cmd.ExecuteScalar();

   if(count == 0)
   
         MessageBox.Show("Sorry no entity was found :-(");
            return;
   

   // write your code for removing things here....
 

【讨论】:

【参考方案2】:

您可以使用 executescalar 方法,它给出表的行数。如果它 > 0 你可以执行删除操作。

MSDN ExecuteScalar 方法示例

【讨论】:

以上是关于从 Access 数据库中删除不存在的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用asp从access数据库中删除特定记录?

仅当 Access 2007 中不存在时才添加记录

access查询设计运行不出来

使用带有记录集的 Access VBA 和 SQL 添加和删除记录

如何在SQL Server2005数据库中检查一个表是不是存在,如存在就删除表记录,如不存在就建表.

MS Access:从子表单中删除记录时捕获值