ji啊

解决方案 »

  1.   

    ADO使你能够在客户程序中通过数据提供者来方便地处理数据.ADO主要的优点是容易使用、高速、低内存、磁盘占用
    在本文的示例工程中我们可以执行存储过程,传递参数给存储过程并接收它的返回值,以下是此过程的主要代码。
    {  
       CString strTmp;
      
       CString m_sdatasource; // Data source name
       CString m_sUserID;     // User Id
       CString m_sPassword;   // Password   // GET the above values from the user 
       //Without creating Datasource we can use database by the following   code
       /* strTmp.Format( "driver={sql server};"
                               "server=%s;"
                               "Database=%s;""UID=%s;""PWD=%s;",
                               m_server,m_sdatabase,m_sUserID,m_sPassword );*/   strTmp.Format( "dsn=%s;""UID=%s;""PWD=%s;",m_sdatasource,m_sUserID,m_sPassword );
       _bstr_t         bstrSQLServerConnect;
       _bstr_t bstrProc =( L"sp_StartByteImport" );; //Stored procedure name
       _variant_t Final;
       bstrSQLServerConnect = (LPCTSTR) strTmp;
       m_status="Empty File";
       _ConnectionPtr  Conn1; // connection object pointer
       _CommandPtr     Cmd1;  // command object pointer
       _RecordsetPtr   Rs1; // recordset object pointer
       bool            bvalid = false;
       try
       {
          Conn1.CreateInstance( __uuidof( Connection ) ); // Instantiating connection object
      Conn1->ConnectionString = bstrSQLServerConnect; // giving the sqlconnection
      Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty ); // open the connection object
      Cmd1.CreateInstance( __uuidof( Command ) ); // creating command object
      Cmd1->ActiveConnection = Conn1;             // giving the connection handle
      Cmd1->CommandText      = _bstr_t( bstrProc ); // passing the stored procedue
      Cmd1->CommandType      = adCmdStoredProc;     // type
      Cmd1->Parameters->Refresh();                 // passing string value as argument to stored procedure
      Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value = _variant_t( (LPCTSTR)m_sfilename );
      Rs1 = Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdUnknown ); // executing the stored procedure and storing the recordset value
      bvalid = true;
      Final  = Rs1->Fields->GetItem( _variant_t( 0L ) )->Value; // getting the first column value of the result row
      strTmp.Format( "%s", CrackStrVariant( Final) ); // to see the value
      // put your code to see all column values   
       }
       catch( CException *e ) // trapping all error messages
       {
      TCHAR    szCause[255];    
          e->GetErrorMessage(szCause, 255);
      m_status=szCause;
       }
       catch( _com_error &e )
       {
    m_status=e.ErrorMessage( );
       }
       catch(...)
       {
    m_status="Error while executing the Import";   }
        //we need to create the stored procedures below before running the application
    //CREATE PROCEDURE sp_AddAccountingInfo @nfinal int, @pcDate datetime,
    //@pcURL varchar (250), @pcTop varchar (250),
    //@pcQueryString varchar (250), @pcBytes int, @pcRequests int AS
           /*
    Do your operation here
    */
    //CREATE PROCEDURE sp_AddAccountingInfo
    //@nfinal int,
    //@pcDate datetime,
    //@pcURL varchar (250),
    //@pcTop varchar (250),
    //@pcQueryString varchar (250),
    //@pcBytes int,
    //@pcRequests int
    //AS
    /*
    Put your code here
    */
    }
      

  2.   

    见:
    http://www.vckbase.com/article/mfc_database/0152692838.htm有示例代码
      

  3.   

    我的代码是这样 
    ::CoInitialize(NULL);    
     _ConnectionPtr pConn;
     pConn.CreateInstance(_uuidof(Connection));
     pConn->Open("Provider = LOLEDB.1;
                  InitialCatalog=aa;
                  DataSource=201.123.133.123",
                  "sa","",adOpenUnspecified);
     pConn->Execute(proc(a,b),0,adCmdUnknown);是这样的,a 是输入参数,
    b是输出参数
    我这段语法不知道怎么写
    我想得到b得值
    没有输出参数的情况下是能调用的 
      

  4.   

    ::CoInitialize(NULL);    
     _ConnectionPtr pConn;
     pConn.CreateInstance(_uuidof(Connection));
     pConn->Open("Provider = LOLEDB.1;
                  InitialCatalog=aa;
                  DataSource=201.123.133.123",
                  "sa","",adOpenUnspecified);_bstr_t bstrProc =( L"proc" );; //Stored procedure name
    _CommandPtr     Cmd1;  // command object pointer
    Cmd1.CreateInstance( __uuidof( Command ) ); // creating command object
    Cmd1->ActiveConnection = Conn1;             // giving the connection handle
    Cmd1->CommandText      = _bstr_t( bstrProc ); // passing the stored procedue
    Cmd1->CommandType      = adCmdStoredProc;     // type
    Cmd1->Parameters->Refresh();                 // passing string value as argument to stored procedure
      
    int a = 1; //输入参数
    int b = 0; //输出参数
    Cmd1->Parameters->Append(m_commandptr->CreateParameter("code",adInteger,adParamInput,sizeof(int),_variant_t(a));
    Cmd1->Parameters->Append(m_commandptr->CreateParameter("code",adInteger,adParamOutput,sizeof(int),_variant_t(b)); Cmd1->Execute(&vtEmpty, &vtEmpty2, adCmdUnknown ); // executing the stored procedure and storing the recordset value
      

  5.   

    m_commandptr是什么东东
    我改成
    Cmd1最后执行出现异常
      

  6.   

    我现在代码 ::CoInitialize(NULL);    
     _ConnectionPtr pConn;
     pConn.CreateInstance(_uuidof(Connection));
     pConn->Open("Provider = SQLOLEDB.1;Initial Catalog=sql;
                  Data Source=201.123.133.123","sa" ,"",
                adOpenUnspecified); 

       _CommandPtr     Cmd1;
       _RecordsetPtr   Rs1;
       _variant_t Final;
     
     Cmd1.CreateInstance( __uuidof( Command ) );
      Cmd1->ActiveConnection = pConn;
     Cmd1->CommandText = _bstr_t(L"sp_cal_in");;
     Cmd1->CommandType = adCmdStoredProc;  
     Cmd1->Parameters->Refresh();
       
     Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value 
                              = _variant_t((LPCTSTR)"345678");
     Cmd1->Parameters->Item[ _variant_t( (long) 2 ) ]->Value 
                              = _variant_t((LPCTSTR)"00E04c7713E7");
     Cmd1->Parameters->Item[ _variant_t( (long) 3 ) ]->Value 
                              = _variant_t( (long) 1);
     Cmd1->Parameters->Item[ _variant_t( (long) 4 ) ]->Value 
                              = _variant_t( (long)0);
     Cmd1->Parameters->Item[ _variant_t( (long) 5 ) ]->Value 
                              = _variant_t( (long)121301);
     Cmd1->Parameters->Item[ _variant_t( (long) 6 ) ]->Value 
                              = _variant_t( (long)0);
     Cmd1->Parameters->Item[ _variant_t( (long) 7 ) ]->Value 
                              = _variant_t((LPCTSTR)"null");
     Cmd1->Parameters->Item[ _variant_t( (long) 8 ) ]->Value 
                               = _variant_t((LPCTSTR)"null");
     Cmd1->Parameters->Item[ _variant_t( (long) 9 ) ]->Value 
                               = _variant_t((long)index);
     Cmd1->Parameters->Item[ _variant_t( (long) 10 )]->Value 
                               = _variant_t((LPCTSTR)ErrInfo);
                   
     Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdUnknown);
    我这样执行以后到最后 Execute还是出现了异常
    大侠们帮我分析一下吧
    是不是我这样写参数不对
    最后两个参数是输出参数