0

我有这个辅助功能:

public bool Delete(String tableName, String where)
    {
        Boolean returnCode = true;
        try
        {
            this.ExecuteNonQuery(String.Format("delete from {0} where {1};", tableName, where));                
        }
        catch (Exception fail)
        {
            MessageBox.Show(fail.Message);
            returnCode = false;
        }
        return returnCode;
    }

TableName 包含“[MyTable]”,其中包含“[MyTable ID]='4ffbd580-b17d-4731-b162-ede8d698e026'”,这是表示行 ID 的唯一 guid。

该函数返回true,就像它成功一样,也不例外,但是行没有从DB中删除,这是怎么回事?

这是 ExecuteNonQuery 函数

 public int ExecuteNonQuery(string sql)
    {
        SQLiteConnection cnn = new SQLiteConnection(dbConnection);
        cnn.Open();
        SQLiteCommand mycommand = new SQLiteCommand(cnn);
        mycommand.CommandText = sql;
        int rowsUpdated = mycommand.ExecuteNonQuery();
        cnn.Close();
        return rowsUpdated;
    }
4

1 回答 1

7

首先,你不应该像那样嵌入 SQL。您应该使用参数化SQL,以避免 SQL 注入攻击。

接下来,您应该查看 的返回值ExecuteNonQuery。假设它遵循 的正常模式ExecuteNonQuery,它应该返回受影响的行数。我怀疑它返回 0,这意味着没有任何内容与您的where子句匹配。

(我也会停止捕捉Exception- 可能会停止捕捉任何东西,但如果必须的话,至少捕捉一些特定的东西。我也会摆脱局部变量,当你知道你想要返回什么时直接返回...... )

于 2013-02-06T20:14:43.670 回答