各位大哥,我在用OLE DB进行数据库插入操作时产生不能插入的情况,给出的提示信息是:不知到出错原因。下面是我的源码:
BOOL COLEDB_MFCView::InsertRecord(CString strTableName, CStringArray &saValue)
{
//savalue 为要插入的字符数组;
if(0==saValue.GetSize()) return FALSE;
if(strTableName.IsEmpty()) return FALSE;
USES_CONVERSION;
//建立存取器类,处理列和命令;
CCommand<CManualAccessor>rs; //TCHAR (*lpszColumns)[50]=NULL;
char (*lpszColumns)[50]=NULL;
CString m_strQuery;
m_strQuery.Format("select * from %s", strTableName);
ULONG ulFields=1+saValue.GetSize(); // set column number;
//ulFields=13;
//AfxMessageBox(m_strQuery);
TRY
{
lpszColumns = new TCHAR[ulFields][50];
// 为新建的存取器帮定列
rs.CreateAccessor(ulFields, &lpszColumns[0], sizeof(char)*50*ulFields);
for (ULONG l=0; l<ulFields; l++){
rs.AddBindEntry(l+1, DBTYPE_STR, 50, &lpszColumns[l]);
} // Create a rowset containing data.
// Set up some properties for the rowset
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,DBPROPVAL_UP_INSERT | DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE); rs.Create(m_Session, m_strQuery);
rs.Prepare();
//AfxMessageBox("nishidashabu");
//下面语句执行没有问题;
if (rs.Open(&propset)!=S_OK){
AfxThrowOLEDBException(rs.m_spRowset, IID_IRowset);
}
/// 向绑定区拷贝数据
for(ULONG i=1;i<ulFields;i++){
_tcsncpy(lpszColumns[i], saValue.GetAt(i-1), 50);
AfxMessageBox(lpszColumns[i]);
} //####################################################################################
//该语句运行时有问题;
if(rs.Insert(0)!=S_OK){
AfxMessageBox("failed to insert ");
AfxThrowOLEDBException(rs.m_spRowset, IID_IRowsetChange);
}
//####################################################################################
// 清除存取区数据;
if (lpszColumns != NULL)
{
delete [ulFields]lpszColumns;
//AfxMessageBox("successful");
lpszColumns = NULL;
}
}
CATCH(COLEDBException, e){
if (lpszColumns != NULL)
delete [ulFields]lpszColumns;
e->ReportError();
return FALSE; }
END_CATCH return TRUE;
}
BOOL COLEDB_MFCView::InsertRecord(CString strTableName, CStringArray &saValue)
{
//savalue 为要插入的字符数组;
if(0==saValue.GetSize()) return FALSE;
if(strTableName.IsEmpty()) return FALSE;
USES_CONVERSION;
//建立存取器类,处理列和命令;
CCommand<CManualAccessor>rs; //TCHAR (*lpszColumns)[50]=NULL;
char (*lpszColumns)[50]=NULL;
CString m_strQuery;
m_strQuery.Format("select * from %s", strTableName);
ULONG ulFields=1+saValue.GetSize(); // set column number;
//ulFields=13;
//AfxMessageBox(m_strQuery);
TRY
{
lpszColumns = new TCHAR[ulFields][50];
// 为新建的存取器帮定列
rs.CreateAccessor(ulFields, &lpszColumns[0], sizeof(char)*50*ulFields);
for (ULONG l=0; l<ulFields; l++){
rs.AddBindEntry(l+1, DBTYPE_STR, 50, &lpszColumns[l]);
} // Create a rowset containing data.
// Set up some properties for the rowset
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,DBPROPVAL_UP_INSERT | DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE); rs.Create(m_Session, m_strQuery);
rs.Prepare();
//AfxMessageBox("nishidashabu");
//下面语句执行没有问题;
if (rs.Open(&propset)!=S_OK){
AfxThrowOLEDBException(rs.m_spRowset, IID_IRowset);
}
/// 向绑定区拷贝数据
for(ULONG i=1;i<ulFields;i++){
_tcsncpy(lpszColumns[i], saValue.GetAt(i-1), 50);
AfxMessageBox(lpszColumns[i]);
} //####################################################################################
//该语句运行时有问题;
if(rs.Insert(0)!=S_OK){
AfxMessageBox("failed to insert ");
AfxThrowOLEDBException(rs.m_spRowset, IID_IRowsetChange);
}
//####################################################################################
// 清除存取区数据;
if (lpszColumns != NULL)
{
delete [ulFields]lpszColumns;
//AfxMessageBox("successful");
lpszColumns = NULL;
}
}
CATCH(COLEDBException, e){
if (lpszColumns != NULL)
delete [ulFields]lpszColumns;
e->ReportError();
return FALSE; }
END_CATCH return TRUE;
}
希望高手赐教程序很急,毕业设计里用,明天验收。
各位如果有VC开发的人事管理系统源码
不妨给小弟发一个
小弟感激涕零!!!