【问题标题】:ExecuteNonquery returns 0ExecuteNonquery 返回 0
【发布时间】:2012-03-31 10:22:56
【问题描述】:

在我的 c# 应用程序中,我试图删除一条记录,并且我正在返回 executenonquery 的结果以检查删除是否完全发生,如下所示。

rowsAffected = db.ExecuteNonQuerySQL(
    @"DELETE FROM relation WHERE parent_itemid = " + SourceThingId + " AND " +
    "     child_itemid = " + ThingId + " AND " +
    "     relation_typeid = " + RelationTypeId);

并且executenonquery定义如下,

using (SQLiteTransaction dbtrans = conn.BeginTransaction())
{
    SQLiteCommand cmd = conn.CreateCommand();
    cmd.CommandText = sqlExpr;
    cmd.CommandType = CommandType.Text;
    ireturn = cmd.ExecuteNonQuery();
    dbtrans.Commit();
}
return ireturn;

但是当我执行它时它不删除并且值返回0。使用的数据库是sqlite。

有人知道为什么会这样吗?请帮忙。

提前感谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

    嗯,确实听起来就像唱片根本不存在一样。您应该通过使用相同的查询运行 SELECT * 来调试它,并查看是否返回任何结果。

    您应该停止将值直接放入 SQL 中,而是使用参数化 SQL。这将更好地分离代码和数据,避免 SQL 注入攻击,并避免转换问题(尤其是日期/时间值)。

    【讨论】:

    • 该记录存在于数据库中。它适用于第二次或第三次尝试。
    • @user703526:你确定它在第一次尝试之前确实存在(并且已经提交)吗?完全相同的查询在没有干预操作(例如提交)的情况下产生不同的结果是非常不寻常的。
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2011-12-28
    • 1970-01-01
    • 2011-12-09
    • 2011-07-17
    相关资源
    最近更新 更多