我有这个辅助功能:
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;
}
答案 0 :(得分:6)
首先,你不应该像这样嵌入SQL。您应该使用参数化 SQL,以避免SQL注入攻击。
接下来,您应该查看ExecuteNonQuery
的返回值。假设它遵循ExecuteNonQuery
的 normal 模式,它应该返回受影响的行数。我怀疑它返回0,这意味着没有任何东西符合你的where
条款。
(我也会停止捕捉Exception
- 可能会停止捕捉任何,但至少要抓住一些特定的东西。如果你必须的话。我也会摆脱局部变量,当你知道要归还什么时,直接回来......)