1、现在一般用ADO,BDE,JDBC,ODBC....
2、是呀!
3、是!

解决方案 »

  1.   

    要控制好CONNECTION 的 TRANSCTION
      

  2.   

    能不能举例子说一下要注意的地方?
    hjhing?
    谢谢。
      

  3.   

    ///////DaoSet  qdserver=dbserver.CreateQueryDef(  "  ")  
    strSQL="EXEC  [SP]  @CODE_IN  =  'BATCHEXCHANGE'  "  
    With  qdserver  
         .Connect="odbc;driver={SQL  Server};database=datqbase;server=servername;pwd=123  "  
         .ReturnsRecords=True  
         .SQL  =  strSQL  
          Set  rsBatch=.OpenRecordset(dbOpenSnapshot,dbSQLPassThrough)  
    End  With
      

  4.   

    ////Ado
    Dim StrCon As String
    StrCon = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;" _
         & "Initial Catalog=你的数据库名称;Data Source=" & 你的IP地址 & ";" _
         & "Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;" _
         & "Use Encryption for Data=False;Tag with column collation when possible=False"
                
    dim AcSys  as new adodb.connection 
       With AcSys
          If .State = adStateOpen Then .Close
          .NonnectionString = StrCon
          .ConnectionTimeout = 30
          .Open
        End With
      

  5.   

    1.配置ODBC,建立ODBC和SQL SERVER的连接ODBCTEST
    2.在VC++通过该ODBC调用SQL SERVER的STORED PROCEDURE(szTypes )
    #include "stdafx.h"
    #include "DatabaseServer.h"
    #include <stdarg.h>#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////CDatabaseServer::CDatabaseServer()
    {

    }CDatabaseServer::~CDatabaseServer()
    {}bool CDatabaseServer::getConnectionString(char *szConnectionString)
    {
    char szServerName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD dwSize=sizeof(szServerName) ;
    if(!GetComputerName(szServerName,&dwSize))
    return false ;
    if(!szConnectionString)
    return false ; char szUserName[] = "SA";
    char szPassword[] = "";
    char szDatabase[] = "IPLOMA";//ADD YOU DATEBASE NAME

    sprintf(szConnectionString,"DSN=ODBCTEST;uid=%s;pwd=%s;",szServerName,szDatabase,szUserName,szPassword); //建立CONNECTION STRING return true;
    }VARIANT CDatabaseServer::getExecStoredProcedure(char *szTypes,SAFEARRAY *pSPFields)
    {
        _variant_t vtResultRows;
        try
        {
    _CommandPtr   pCmdPtr;
            _RecordsetPtr pRecordset;
            HRESULT hr ;  hr = pCmdPtr.CreateInstance(__uuidof(Command)); char szConnectionString[255];
    getConnectionString(szConnectionString);
    _variant_t vtConnectionString(szConnectionString);
    pCmdPtr->put_ActiveConnection(vtConnectionString);        pCmdPtr->CommandType = adCmdStoredProc; //CALL SQL SP
    pCmdPtr->CommandText =  szTypes ; //YOU SP NAME
    hr = pCmdPtr->Parameters->Refresh();    long lBound,uBound ;
       HRESULT hresult ;
       // Getting Safe Array's Lower and Upper Bounds
       hresult = SafeArrayGetLBound(pSPFields, 1, &lBound);
           hresult = SafeArrayGetUBound(pSPFields, 1, &uBound);    variant_t vtParamVal;
    _variant_t Index;
    Index.vt = VT_I2;
    Index.iVal = 1 ;
       for (long iElements=lBound;iElements<=uBound;iElements++)
       {
    hresult = SafeArrayGetElement(pSPFields, &iElements, &vtParamVal);
    pCmdPtr->GetParameters()->GetItem(Index)->PutValue(vtParamVal) ;
    Index.iVal++ ;
       }    //Execute current Stored Procedure
            _variant_t vEffected ;
    pRecordset = pCmdPtr->Execute(&vEffected,NULL,NULL);
    if (pRecordset->BOF || pRecordset->EndOfFile)
    throw ;
    // Get result set in the form of array
            vtResultRows = pRecordset->GetRows(-1);
            return vtResultRows.Detach() ;
    }
    catch(_com_error &e)
        {
    ATLTRACE((LPCSTR)e.Description());
        }
    vtResultRows.vt = VT_EMPTY ;
        return vtResultRows.Detach();
    }long CDatabaseServer::setExecStoredProcedure(char *szTypes,SAFEARRAY *pSPFields)
    {
        _variant_t vtResultRows;
        try
        {
            _CommandPtr   pCmdPtr;
            _RecordsetPtr pRecordset;
            HRESULT hr ;  hr = pCmdPtr.CreateInstance(__uuidof(Command)); char szConnectionString[255];
    getConnectionString(szConnectionString);
    _variant_t vtConnectionString(szConnectionString);
    pCmdPtr->put_ActiveConnection(vtConnectionString);        pCmdPtr->CommandType = adCmdStoredProc;
    pCmdPtr->CommandText =  szTypes ;
    hr = pCmdPtr->Parameters->Refresh();    long lBound,uBound;
       HRESULT hresult;
       // Getting Safe Array's Lower and Upper Bounds
       hresult = SafeArrayGetLBound(pSPFields, 1, &lBound);
           hresult = SafeArrayGetUBound(pSPFields, 1, &uBound);    variant_t vtParamVal;
    _variant_t Index;
    Index.vt = VT_I2;
    Index.iVal = 1 ;
       for (long iElements=lBound;iElements<=uBound;iElements++)
       {
    hresult = SafeArrayGetElement(pSPFields, &iElements, &vtParamVal);
    pCmdPtr->GetParameters()->GetItem(Index)->PutValue(vtParamVal) ;
    Index.iVal++ ;
       }        _variant_t vEffected ;
    pCmdPtr->Execute(&vEffected,NULL,NULL);

    // We Are Expecting That Stored Procedures Return ID for Entity to which 
    // NSERT/UPDATE/DELETE  operation is being performed
            return (long)pCmdPtr->Parameters->Item["RETURN_VALUE"]->Value  ;
        }
        catch(_com_error &e)
        {
           ATLTRACE((LPCSTR)e.Description());
        }
        return 0;
    }
      

  6.   

    用MODEM对拨,怎么实现SQLSERVER的互联啊?