SQLConfigDataSource (ODBC)

解决方案 »

  1.   


    SQLConfigDataSource (ODBC)
      

  2.   

    我用这条语句SqlConfigDataSource(NULL,ODBC_ADD_DSN,"SQL Server","DSN=PowView\0UID=sa\0PWD=;\0DATABASE=Personal\0\0");
    执行结果是0,错在哪?
      

  3.   

    我对ODBC API编程不是很熟,不过我建议你使用基于DSN-Less的连接:
    SQLConnect("Driver=SQL Server,DBQ=DbName,UserID=uid,Password=pwd")
      

  4.   

    下面我曾写的几段代码供参考,加DSN是绝对没问题的,同时可以显示你的错误原因,根据错误原因再修改连接串吧.void ShowInstErr(void)
    {    TCHAR szErrMsg[100],pBuf[256];
         WORD  cbErrMsg;
     DWORD errcode;
     SQLInstallerError(1,&errcode,szErrMsg,sizeof(szErrMsg),&cbErrMsg);
     wsprintf(pBuf,"ODBCINST(%d):\n%s",errcode,szErrMsg);
     MessageBox(0,pBuf,_T("ODBC安装错误"),MB_OK|MB_ICONERROR);
    }BOOL WINAPI RemoveDSN(LPTSTR lpszDSName,LPTSTR lpszDriverName)
    { TCHAR pBuf[ATTR_LEN];
    LPTSTR pAttrFmt="DSN=%s;";
    wsprintf(pBuf,pAttrFmt,lpszDSName);
    LPTSTR p=_tcschr(pBuf,';');
    *p='\0';
    BOOL ret= ::SQLConfigDataSource (NULL,ODBC_REMOVE_DSN,lpszDriverName,pBuf);
    if (!ret) ShowInstErr();
    return ret;
    }
    /******************************************
    *
    *入口要求:连接串用"name1=value1;name2=value2"之类,
    *Attibute中不含有DSN=...
    *
    *
    *******************************************/
    BOOL WINAPI AddDatasource(HWND hwndParent,LPTSTR lpszDSName,LPTSTR lpszDriverName,LPTSTR lpszAttribute)
    {
    BOOL ret;
        TCHAR pAttr[ATTR_LEN];
    ::wsprintf(pAttr,_T("DSN=%s;%s;"),lpszDSName,lpszAttribute);
    LPTSTR temp=pAttr;

    //;全部替换成\0;
    while(*temp){
    if (*temp==';') *temp='\0';
    temp++;
    }
    ret= ::SQLConfigDataSource (hwndParent,ODBC_ADD_DSN,lpszDriverName,pAttr);
    if (!ret) ShowInstErr();
    return ret;
    }