我看了好多资,书上对增加数据都是用AddNew()来完成,但这样不是很灵活,VC里是否可以象ASP里用ADO一样,直接用数据库连接对象直接执行insert,update,del等操作,如
conn.execute("INSERT INTO TAB (...)VALUES(...)"),谢谢!!

解决方案 »

  1.   

    CDatabase类可以直接执行SQL语句,或调用存储过程。
      

  2.   

    能否具体一点?贴个原码?谢谢zhaotaoxi()
      

  3.   

    当然可以,用execute可以执行sql语句
      

  4.   

    一个小例子:
    CDatabase m_db;
    ...
    CRecordset rs(&m_db);
    CString strSQL;
    //存储过程的名字为newprjid,该存储过程返回一个整数,字段名为prjid
    strSQL = "{CALL newprjid}";
    rs.Open(AFX_DB_USE_DEFAULT_TYPE, strSQL);
    rs.GetFieldValue("prjid", m_prjguid);
    rs.Close();
      

  5.   

    老兄,能不能来个简单点的ADO?
      

  6.   

    没问题的
    short nIndex = m_cDataGrid.GetRow();///获得选中记录的位置

    try
    {
    rs->Move((long)nIndex,_variant_t((long)adBookFirst));
    vYhbh = rs->GetCollect(_variant_t(long(0)));
    vYhmc = rs->GetCollect(_variant_t(long(1)));
    vBmmc = rs->GetCollect(_variant_t(long(2)));
    vKsmc = rs->GetCollect(_variant_t(long(3)));
    vRylb = rs->GetCollect(_variant_t(long(4))); m_strQuery.Format("SELECT CZQX FROM QYHXXB WHERE YHBH='%s'",(LPCTSTR)(_bstr_t)vYhbh);
    TRACE("操作权限的查询语句:%s",m_strQuery);
    cmd->CommandText = (_bstr_t) m_strQuery
    rs = cmd->Execute(&vra,vt1, adCmdText);
    ASSERT(rs!=NULL);
    vCzqx = rs->GetCollect(_variant_t(long(0)));}
    if(dlg.m_yhmc != (LPCTSTR)(_bstr_t)vYhmc)
    {
             ///用户名称改变,才更新用户表
              m_strQuery.Format("UPDATE QYHB SET YHM='%s' WHERE YHBH='%s'",dlg.m_yhmc,dlg.m_yhbh);
    TRACE("用户表更新记录语句:%s\n",m_strQuery);

    cmd->CommandText = (_bstr_t) m_strQuery.GetBuffer(0); cmd->Execute(&vra,vt1, adCmdText);
    }
             m_strQuery.Format("INSERT INTO QYHB(YHBH,YHM) VALUES('%s','%s')",dlg.m_yhbh,dlg.m_yhmc);
    TRACE("插入记录语句:%s\n",m_strQuery);

    cmd->CommandText = (_bstr_t) m_strQuery cmd->Execute(&vra,vt1, adCmdText);
    以上是我的程序中的片断用的是Command对象的Execute方法
    Connection的应该是一样的