需要将二进制数据写入数据库中自己写了个动态绑定的CMyRecordset类,添加操作没有问题但是更新时,我选择的记录只有1条,CString strSQL = "Select Modifyer,UsedNow,Data from tbl_N_NestProject";
CString strFilter = "ID = 80";
char *strSort = NULL;其中:Data是二进制 Image类型
     ID   是自动加1的主键如此选择只有1条记录然后使用
CMyRecordset *pMyRecordset->CreateAndOpen(strSQL,strSort,strFilter);
pMyRecordset->Edit();//更新内容pMyRecordset->Update();在更新语句中跟踪到BuildUpdateSQL()函数中去有个语句 ::SQLRowCount(htmt,lRowCount);这个lRowCount就是更新的记录数为3我的整个表中的记录就是3条程序然后判断lRowCount是否为1,为1是正常,其他的都是不正常的就会抛出异常报告"多行数据被更新"请大家看看是什么问题导致的.如果有::SQLRowCount函数的实现方法的,也可以就是想看看到底是什么原因造成的.

解决方案 »

  1.   

    CRecoreset::SetFilter() //??
    或者 strSQL 加上 WHERE
      

  2.   

    跟踪进BuildUpdateSQL()函数MS自己设置了更新语句UPDATE tbl_N_NestProject SET Data=?  WHERE CURRENT OF SQL_CUR0152D138跟strFilter及strSort都没有关系
      

  3.   

    CMyRecordset *pMyRecordset->CreateAndOpen(strSQL,strSort,strFilter);
    pMyRecordset->Edit();这里能正确选择那条id为80的记录,并修改其data ? (没where啊?)UPDATE tbl_N_NestProject SET Data=?  WHERE CURRENT OF SQL_CUR0152D138
    更新也得选择滴啊,这里的WHERE后面的CURRENT OF SQL_CUR0152D138 是啥意思...你这里SQL与前面的不对应,不可以把 CURRENT OF SQL_CUR0152D138 改为id = 80吗? 
      

  4.   

    楼上:Where 语句就是 strFilterstrFilter = "ID = 80";在打开时strFilter 就将值赋给pMyRecordset->m_strFilter了MS在查询时就会自动加Where关键字了-------------------
    UPDATE tbl_N_NestProject SET Data=?  WHERE CURRENT OF SQL_CUR0152D138这个是MS自己在BuildUpdateSQL函数中组建的使用的是游标 后面的SQL_CUR0152D138是游标名这个是MS的DB操作的内核函数,不是我能修改的