【问题标题】:Deleting a non-existent record from an Access database从 Access 数据库中删除不存在的记录
【发布时间】: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 注入。

标签: c# .net ms-access


【解决方案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 方法示例

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多