数据库操作冲突
在连接数据库后 进程就进行磁盘整理 则定时删除一些信息 但在删除信息时候的同时 还要删除一些信息 此时会发生冲突
问各位如何解决
)//启动进程进行磁盘整理,定时删除数据
UINT WINAPI CMyuser::DeleteThreed(LPVOID pParam)//启动进程进行磁盘整理
{ CMyuser *This = reinterpret_cast<CMyuser *>(pParam);
This->ConnectionDatabase();//连接数据库
while (flat)//标志位初始值为ture 则关闭线程是为false
{
if (This->GetDiskSize()<11)//查询磁盘容量 小于10进行删除数据
{
This->FindData();//删除数据
Sleep(3000);
}
}
return 0;
}
//进行数据插入
Object_LinkList * CMyuser::InsertData(Object_LinkList *s)
{
Object_LinkList *head=NULL;
int i_return;
char c_strSql[350];
strcpy_s(c_strSql,"0");
sprintf(c_strSql,"insert into mainTable1(TargetType,CarPlate,CarType,CarColor,\
PlateColor,PicturePath,CaptureTime,Speed,CarDistination,LaneNum,\
IsSend,PictureCount)values('%s','%s','%s','%s','%s','%s',%.f,%d,%d,%d,%d,%d)",\
s->data->c_TargetType,s->data->c_CarPlate,s->data->c_CarType,s->data->c_CarColor,s->data->c_PlateColor,s->data->c_PicturePath,s->data->sTime,s->data->i_Speed,\
s->data->i_CarDistination,s->data->i_LaneNum,s->data->i_IsSend,s->data->i_PictureCount);
i_return=m_SQL.Function_Recordset(c_strSql);
delete s->data;
delete s;
return head;
}
[解决办法]
做并发控制(临界区、互斥量、加锁 ==),不能删除、插入同时执行。
[解决办法]
数据库操作是原子操作,在插入的时候一条数据这个事务未结束之前,该事务是被锁住的,这时候如果刚好有删除的话就报错了