数据库连接成功了,也能从中读处数据库的内容了,但写入的时候好像是函数用的不对所以总是中断跳出了,下面是做插入的那个函数代码,高手们帮帮忙。
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;

解决方案 »

  1.   

    看看这个吧:// TODO: Add extra validation here 
     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();
      

  2.   

    楼上用的是什么方法连接的数据库,我想用OLE DB连sql,所以要创建个存取器然后将列绑定到存取器上,然后通过这个存取器来插入数据到数据库,就是不知道是哪里写的有问题,rs.insert(0)总是不能返回S_OK,谢谢楼上的同志,
      

  3.   

    建议:完全重新做,采用ado的方式,从网上找个封装好的类,很方便。
    如:
    /*########################################################################
    【文件名】:  ado.h
    【名  称】: ADO 封装类.
    【版  本】: 0.20
    【作  者】: 成真
    【E-mail】: [email protected]
      ########################################################################*/