数据库连接成功了,也能从中读处数据库的内容了,但写入的时候好像是函数用的不对所以总是中断跳出了,下面是做插入的那个函数代码,高手们帮帮忙。
void CStudnetManagerView::OnInputInfo()
{
// TODO: 在此添加命令处理程序代码
InputBaseInfo InputInfoDlg;
Info tempInfo;
tempInfo.no="";
Info *p=&tempInfo;
CString strTableName="StudentInfo";
if(InputInfoDlg.DoModal()==IDOK){
UpdateData();
tempInfo.no=InputInfoDlg.s_no;
tempInfo.age=InputInfoDlg.s_age;
tempInfo.classname=InputInfoDlg.s_class;
tempInfo.pro=InputInfoDlg.s_pro;
tempInfo.name=InputInfoDlg.s_name;
/*********************/
CCommand<CManualAccessor> rs;
//TCHAR (*lpszColumns)[50] = NULL;
CString m_strQuery;
m_strQuery.Format("select * from %s", strTableName);
ULONG ulFields = 5;
//lpszColumns = new TCHAR[ulFields][50];
// 创建存取器
rs.CreateAccessor(ulFields,p,sizeof(tempInfo));
// 绑定列
rs.AddBindEntry(1,DBTYPE_STR,40,&tempInfo.no);
rs.AddBindEntry(2,DBTYPE_STR,40,&tempInfo.name);
rs.AddBindEntry(3,DBTYPE_STR,40,&tempInfo.age);
rs.AddBindEntry(4,DBTYPE_STR,40,&tempInfo.pro);
rs.AddBindEntry(5,DBTYPE_STR,40,&tempInfo.classname);
// Create a rowset containing data.
// 建立存取器的属性对象,
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();
if (rs.Open(&propset) != S_OK)
{
MessageBox("open error!");
exit(0);
}
// 执行行插入操作
if (rs.Insert(0) != S_OK)
{
MessageBox("insert error!");
exit(0);
}
/***********************/
}}下面是连接数据库的部分,这部分没问题,能连上数据库
CListView::OnInitialUpdate();
CListCtrl &m_listCtrl = GetListCtrl(); HRESULT hr;
CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_INTEGRATED, "SSPI");
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO,
false);
dbinit.AddProperty(DBPROP_INIT_CATALOG, "Student");
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "XIAOYAO");
// 开始连接
/*One or more database sessions can be created for a single connection.
These sessions are represented by CSession. You must call
CDataSource::Open to open the connection before creating a session with CSession::Open.*/
hr = m_Connect.Open("SQLOLEDB.1", &dbinit);
if (FAILED(hr))
return;
// 建立会话
hr = m_Session.Open(m_Connect);
if (FAILED(hr))
return;
void CStudnetManagerView::OnInputInfo()
{
// TODO: 在此添加命令处理程序代码
InputBaseInfo InputInfoDlg;
Info tempInfo;
tempInfo.no="";
Info *p=&tempInfo;
CString strTableName="StudentInfo";
if(InputInfoDlg.DoModal()==IDOK){
UpdateData();
tempInfo.no=InputInfoDlg.s_no;
tempInfo.age=InputInfoDlg.s_age;
tempInfo.classname=InputInfoDlg.s_class;
tempInfo.pro=InputInfoDlg.s_pro;
tempInfo.name=InputInfoDlg.s_name;
/*********************/
CCommand<CManualAccessor> rs;
//TCHAR (*lpszColumns)[50] = NULL;
CString m_strQuery;
m_strQuery.Format("select * from %s", strTableName);
ULONG ulFields = 5;
//lpszColumns = new TCHAR[ulFields][50];
// 创建存取器
rs.CreateAccessor(ulFields,p,sizeof(tempInfo));
// 绑定列
rs.AddBindEntry(1,DBTYPE_STR,40,&tempInfo.no);
rs.AddBindEntry(2,DBTYPE_STR,40,&tempInfo.name);
rs.AddBindEntry(3,DBTYPE_STR,40,&tempInfo.age);
rs.AddBindEntry(4,DBTYPE_STR,40,&tempInfo.pro);
rs.AddBindEntry(5,DBTYPE_STR,40,&tempInfo.classname);
// Create a rowset containing data.
// 建立存取器的属性对象,
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();
if (rs.Open(&propset) != S_OK)
{
MessageBox("open error!");
exit(0);
}
// 执行行插入操作
if (rs.Insert(0) != S_OK)
{
MessageBox("insert error!");
exit(0);
}
/***********************/
}}下面是连接数据库的部分,这部分没问题,能连上数据库
CListView::OnInitialUpdate();
CListCtrl &m_listCtrl = GetListCtrl(); HRESULT hr;
CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_INTEGRATED, "SSPI");
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO,
false);
dbinit.AddProperty(DBPROP_INIT_CATALOG, "Student");
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "XIAOYAO");
// 开始连接
/*One or more database sessions can be created for a single connection.
These sessions are represented by CSession. You must call
CDataSource::Open to open the connection before creating a session with CSession::Open.*/
hr = m_Connect.Open("SQLOLEDB.1", &dbinit);
if (FAILED(hr))
return;
// 建立会话
hr = m_Session.Open(m_Connect);
if (FAILED(hr))
return;
解决方案 »
- 我有一个第三方命令行程序能接受stdin,我的程序怎么传数据给它呢?
- 状态栏添加按钮,不能显示,怎么破?
- 超级烦 如何在MFC工程中加入corba!!!
- 如何改变Windows开机时登陆的验证机制
- CPropertySheet的两个page里定义变量如何共享存取
- 如何CEdit自动换行?
- 关于CObList的问题,急用!
- 在CRecordset里查询记录的问题
- vc++ 程序想用skin++换肤。skin++官网是啥?skin++是谁提供的?
- 各位大侠,谁有 Visual Asisant 的序列号,谢谢。
- 用WM_DEVICECHANGE得到插入USB设备的消息,
- vc保存excel文件,可以一列一列的保存么? 或者循环保存成一系列的文件时,自动改变文件名么?
UpdateData(TRUE);
CString strSQL;
// CResourceSet m_recordset(&m_database);
int i=1;
int flag=0;
while(!flag){
CBookSet m_recordset(&m_database);
strSQL.Format("select * from BOOK where BOOK_ID=%d",i);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()==0){
strSQL.Format("insert into BOOK values(%d,\'%s\',\'%s\',%d,%d,%d,%f)",i,m_name,m_author,0,m_courseid,m_quantity,m_price);
m_database.ExecuteSQL(strSQL);
m_database.Close();
CDialog::OnOK();
flag=1;
}
i++;
//m_recordset.Delete();
如:
/*########################################################################
【文件名】: ado.h
【名 称】: ADO 封装类.
【版 本】: 0.20
【作 者】: 成真
【E-mail】: [email protected]
########################################################################*/