从 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 数据库中删除不存在的记录的主要内容,如果未能解决你的问题,请参考以下文章
使用带有记录集的 Access VBA 和 SQL 添加和删除记录