在ODBC数据源设置的客户端配置里有相似的东西。不需要客户端

解决方案 »

  1.   

    用ado连接呀!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;
    }
      

  2.   

    dbmsadsn.dll
    dbmsdecn.dll
    dbmsrpcn.dll
    dbmsscon.dll
    dbmscpxn.dll
    dbmsvinn.dll
    dbnmpntw.dll
    ntwdblib.dll
    sqloledb65.dll
    sqloldedb65.tib 
    windbver.exe
    通过最后一个文件进行客端配置
      

  3.   

    只有zqllyh(找感觉)理解了我的意思,
    我是指运行客户端连接程序至少需要哪些文件(不是用odbc连),
    将这些文件移到另一台机器上,文件放到什么位置以及注册表还需设置哪些键值就能使用了,管道设置信息放在注册表的哪些键值中。
      

  4.   

    不知道我有没有漏掉,我已安装了客户端,无法测出以上的列出是否正确。
    您只要把这些文件放在WINDOWS下的SYSTEM就行。试好了记得告诉大家。