1

我有带有 ID 的 CArray/CMap。
SQL 表上有:ID、Value、StartTime、EndTime。
我收到 StartTime 和 EndTime 并且需要删除该 CArray 上出现的所有 ID。
因此需要查询,例如:
“从表中删除 id in (list[0], list[1], list[2]. ... list[n]) 和 T1 和 T2 之间的时间”
我的问题是如何实现“in (..)”如何传输 CArray 上的 ID?

将 CDatabase.executeSQL(QUERY) 与 CommitTrans 和 CommitTrans 一起使用

谢谢

4

1 回答 1

1

你可以做的很简单(假设你有 CArray 并且它被称为 arId):

CString sql, item;
sql = _T("delete from table where id ");
if(arId.GetCount() == 1)
{
  item.Format(_T(" = %d"), arId[0]);
  sql += item;
}
else
{
  for(int i = 0; i < arId.GetCount(); ++i)
  {
    if(i == 0) sql += _T("IN (");
    item.Format(_T("%d"), arId[0]);
    if(i == arId.GetCount()-1)
      item += _T(")");
    else
      item += _T(", ");
    sql += item;
  }
}
CDatabase.executeSQL(sql);

对于 CMap,将 for(i = 0;...) 替换为 POSITION pos = mapId.GetStartPosition() 等。

于 2012-11-29T00:45:34.360 回答