我维护一个在数据库中完成的操作列表(删除和更新)。
我使用foreach
迭代列表并执行这些操作。下面是示例伪代码。我正在使用Entity Framework和SQL Server作为它背后的数据库。
foreach ( dbChange in dbChanges)
{
switch (dbChange.Operation)
{
case Add:
queryStr = String.Format("DELETE FROM {0} WHERE {1} = {2}",
dbChange.TableName,
dbChange.PrimaryKeyName,
dbChange.PrimaryKeyValue);
break;
case Update:
queryStr = String.Format("UPDATE {0} SET {1} = '{2}' WHERE {3} = {4}",
dbChange.TableName,
dbChange.ColumnName,
dbChange.PreviousValue,
dbChange.PrimaryKeyName,
dbChange.PrimaryKeyValue);
break;
}
DBQuery.ExecuteCommand(ConnectionString, queryStr, 10);
}
我的问题:完美无缺,并进行必要的更改。但有时随机数据库操作无法正常完成。像某些值未更新或某些行未被删除。
我努力找出背后可能的原因。可能的原因(竞争条件或其他什么?)和纠正措施。提前谢谢。
答案 0 :(得分:0)
排除在查询后更改记录值的SaveChanges或其他查询,您需要跟踪异常和ExecuteCommand的结果(应该是1),否则将很难理解该问题。
无论如何,只是为了开始,错误可能是:
1. SQL语法(更新查询中的SQL注入或无效字段名称)。因此,请将dbChange.PreviousValue
替换为dbChange.PreviousValue.Replace("'", "''")
并引用字段名称
2.参照完整性违规(您可以使用ExecuteCommand返回值进行检查。