BOOL CAdoCtrl::InsertRow(_RecordsetPtr recordset, CStringArray &saValues)
{
int nColNum = 0;
//有效性检验
if(!m_bConnection) return FALSE;
if(0 == (nColNum = saValues.GetSize())) return FALSE;
//
HRESULT hr;
Fields* fields = NULL;
Field* field = NULL;
VARIANT varValue;
VARIANT varCount;
DataTypeEnum data_type;
varCount.vt = VT_I4;
try
{
hr = recordset->AddNew();
hr = recordset->get_Fields(&fields);
for(int i=0;i<nColNum;i++)
{
varCount.lVal = i;
hr = fields->get_Item(varCount, &field);
field->get_Type(&data_type);
if(!ConstructVar(saValues.GetAt(i), data_type, &varValue)) return FALSE;
//*****************此处曾出现在
//:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
hr = field->put_Value(varValue);
}
fields->Release();
field->Release();
}
catch (_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
return (SUCCEEDED(hr));
}这个函数能顺利执行完毕,但没能将数据与入到数据库中。我在跟踪时发现当执行到最后一个CArray对象时,varValue显示:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
1、不知道这个操作错误的产生都与何有关?
2、每个OLE DB状态值是指哪个?如何检查?
在这里谢谢大家先了。
{
int nColNum = 0;
//有效性检验
if(!m_bConnection) return FALSE;
if(0 == (nColNum = saValues.GetSize())) return FALSE;
//
HRESULT hr;
Fields* fields = NULL;
Field* field = NULL;
VARIANT varValue;
VARIANT varCount;
DataTypeEnum data_type;
varCount.vt = VT_I4;
try
{
hr = recordset->AddNew();
hr = recordset->get_Fields(&fields);
for(int i=0;i<nColNum;i++)
{
varCount.lVal = i;
hr = fields->get_Item(varCount, &field);
field->get_Type(&data_type);
if(!ConstructVar(saValues.GetAt(i), data_type, &varValue)) return FALSE;
//*****************此处曾出现在
//:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
hr = field->put_Value(varValue);
}
fields->Release();
field->Release();
}
catch (_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
return (SUCCEEDED(hr));
}这个函数能顺利执行完毕,但没能将数据与入到数据库中。我在跟踪时发现当执行到最后一个CArray对象时,varValue显示:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
1、不知道这个操作错误的产生都与何有关?
2、每个OLE DB状态值是指哪个?如何检查?
在这里谢谢大家先了。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货