各位大哥,我在用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;
}
解决方案 »
- IE工具条按钮问题
- 我发现我完全不了解指针【杯具帖】
- [60分] ATL,非CWindow派生的类,如何得到m_hWnd?用_Module不行啊
- 关于使用MCIWndRecord录音问题
- 成都某软件工作室寻找合作伙伴(请对游戏/网络/多媒体编程有兴趣的朋友都来看看)
- 关于VC++自带程序的问题,送分
- 紧急求教:为什么在一个线程里打不开文件,我使用了MFC 的CFile,也试过fopen,但都返回失败信息,为什么?难道在线程里就不行吗?
- bmp图片相似度比较
- 如何在notepad中添加个子菜单,点击子菜单可以运行我想要运行的程序?
- 32位程序把64位动态库注入64位程序相关问题
- 狂分高分求一小型简单组态软件的代码(最好用Vc++开发的)
- 如何编程最大化窗口?用ShowWindow(WM_SW_MAXIMIZE)和ShowWindow(SW_SHOWMAXIMIZED)都将窗口全屏了,连桌面的任务栏也被覆盖了!!
希望高手赐教程序很急,毕业设计里用,明天验收。
各位如果有VC开发的人事管理系统源码
不妨给小弟发一个
小弟感激涕零!!!