CString strConfigFile = ".\\ExcelServer.ini"; 
CString strServer;
CString strUserID;
CString strPwd;
CString strDataBase;
CString strProvider; GetPrivateProfileString(_T("SERVER"),_T("SERVER"),_T("127.0.0.1"), strServer.GetBuffer(128), 128,strConfigFile);
GetPrivateProfileString(_T("SERVER"),_T("UserID"),_T("sa"), strUserID.GetBuffer(128), 128,strConfigFile);
GetPrivateProfileString(_T("SERVER"),_T("PassWord"),_T(""), strPwd.GetBuffer(128), 128,strConfigFile);
GetPrivateProfileString(_T("SERVER"),_T("DataBase"),_T("SysRpt"), strDataBase.GetBuffer(128), 128,strConfigFile);
GetPrivateProfileString(_T("SERVER"),_T("Provider"),_T("SQLOLEDB.1"), strProvider.GetBuffer(128), 128,strConfigFile);//strProvider 读到的数据为:
//strProvider读到的数据为:SQLOLEDB.1
//strServer读到的数据为:10.192.84.12
//strUserID读到的数据为:sa
//strPassWord读到的数据为: 
//strDataBase读到的数据为:SysRpt strConnect = _T("Provider=") + strProvider +
_T("; Data Source=") + strServer + 
_T("; Initial Catalog=") + strDataBase  +
_T("; User ID=") + strUserID + 
_T("; PWD=") + strPwd;
但是strConnect = "Provider=; Data Source=; Initial Catalog=; User ID=; PWD=";
这是为啥,高手帮忙?!

解决方案 »

  1.   

    strConnect = "Provider=" + strProvider +
    "; Data Source=" + strServer + 
    "; Initial Catalog=" + strDataBase  +
    "; User ID=" + strUserID + 
    "; PWD=" + strPwd;
    看可以么
      

  2.   

    CString strServer(' ',128);
    别的也一样。
      

  3.   

    1.首先确认你需要提取信息的ini文件里信息是否完整。2.GetPrivateProfileString(_T("SERVER"),_T("Provider"),_T("SQLOLEDB.1"), strProvider.GetBuffer(128), 128,strConfigFile);
    ----------
    上面的strProvider.GetBuffer(128)直接使用strProvider就可以3.如果你软体中使用的是unicode,因为ini中只支持ansi,所以你需要改变方式操作
    这个比较复杂,看你是不是,如果是
    可以e_mail to me
    [email protected]
      

  4.   

    使用Format函数
    strConnect.Format("",...);
      

  5.   

    我想是用了GetBuffer()之后,没有用ReleaseBuffer()的缘故。
      

  6.   

    对,我也觉得用Format比较好.^_^
      

  7.   

    不是Format的问题,是楼主读配置时用GetBuffer()获得CString的缓冲区地址,用了Getbuffer之后,一定要调用ReleaseBuffer(),才能用别的CString函数。这个问题我碰到过,有经验,后来查了msdn,上面说:Res
    If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString methods. 
      

  8.   

    GetBuffer()之后,必须是ReleaseBuffer()之后,调用其他函数,本题:
    strConnect = "Provider=" + strProvider +
    "; Data Source=" + strServer + 
    "; Initial Catalog=" + strDataBase  +
    "; User ID=" + strUserID + 
    "; PWD=" + strPwd;
    实际上是调用了CString 的operator +() 方法,而在调用此方法之前,却没有调用ReleaseBuffer(),所以,strServer 等没有值。
      

  9.   

    str.Format(...)
    然后用LPCTSTR转换
    m_recordset.Open((LPCTSTR)str,...)