我的程序通过输入局域网内机器名可以访问其数据库,但是输入IP地址,就不能连接数据库,请高手给一些思路,谢谢!

解决方案 »

  1.   

    HRESULT hr;
    try
    {
    hr = pConnection.CreateInstance("ADODB.Connection");
    if (SUCCEEDED(hr))
    {
    CString sql; 
    sql.Format("driver={SQL Server};Server=%s; DATABASE=%s; UID=%s; PWD=%s",serverip,database,username,userpass);

    hr = pConnection->Open((LPCTSTR)sql, "", "", adModeUnknown);
    }
    }
    catch (_com_error e)
    {
    AfxMessageBox(e.Description());
    return false;
    }
      

  2.   

    sql.Format("Provider=SQLOLEDB.1;Data Source=%s;Initial Catalog=%s;UID=%s; PWD=%s",serverip,databasename,username,userpass);
      

  3.   

    还是不行啊!!//下面的语句可以连网内的机器3hhjm上的数据库,但是将机器名改为ip地址,就不能连接??
    /* 改后的语句: hr=m_pConn->Open("driver={SQL Server};server=192.168.0.221;DATABASE=jc2003_db_jm;UID=sa;PWD=;","","",adModeUnknown);
    */void CEDlg::OnOK() 
    {
    _ConnectionPtr cn;
    // TODO: Add extra validation here
    HRESULT hr;
    _bstr_t bt;
    _RecordsetPtr  m_pRecordset;
    _ConnectionPtr m_pConn;//(__uuidof(Connection));
        //AfxOleInit();

    BOOL m_bConnected=FALSE;
    UpdateData();
    //bt=(_bstr_t)"Provider=SQLOLEDB.1;Persist Security Info=False;User ID="+(_bstr_t)m_user+(_bstr_t)";Password="+(_bstr_t)m_pwd+(_bstr_t)";Initial Catalog="+(_bstr_t)m_db+(_bstr_t)";Data Source="+(_bstr_t)m_server;
    CoInitialize(NULL);  //Initialize COM 
    try{     
    //hr=m_pConn->Open("driver={SQL Server};DATABASE=jc2003_db_test;UID=sa;PWD=;","","",adModeUnknown);
    hr=m_pConn.CreateInstance(__uuidof(Connection));
            ASSERT(SUCCEEDED(hr));
        ///---------------------修改后----------------------------------
            //hr=m_pConn->Open (bt,_bstr_t(""),_bstr_t(""),adModeUnknown);
    ///////////////////////////////////////
    CString sql,ip,dbname,uid,pwd;
    ip="3hhjm";//""192.168.0.60";
    dbname="jc2003_db_jm";
    uid="sa";
    sql.Format("driver={SQL Server};server=%s;database=%s;UID=%s;pwd=",ip,dbname,uid);
      
    AfxMessageBox(sql);
    hr = m_pConn->Open((LPCTSTR)sql, "", "", adModeUnknown);
    //////////////////////////////////////
    //----------------------------------------------------------------------
        
    //hr=m_pConn->Open("driver={SQL Server};server=192.168.0.10;DATABASE=jc2003_db_test;UID=sa;PWD=;","","",adModeUnknown);
    ASSERT(SUCCEEDED(hr));
    if (SUCCEEDED(hr))
    {
    AfxMessageBox("数据库连接成功!");
    }
        m_bConnected=TRUE;
        m_pRecordset.CreateInstance(__uuidof(Recordset));
        m_pRecordset->Open("SELECT * FROM user_auth_2",m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

    CString str;
    m_pRecordset->MoveFirst();
    while(!m_pRecordset->EndOfFile)
    {
    str=(char*)(_bstr_t)m_pRecordset->Fields->GetItem("person_id")->Value;
        //MessageBox(str,"title");
    m_pRecordset->MoveNext();
    }
    m_pRecordset->Close();
    }
    catch ( _com_error ){
    AfxMessageBox("数据库连接失败,请与系统管理员联系!");
    }
    ::CoUninitialize();
    }
      

  4.   

    我想:
    直接访问IP如果在一个网段里只要装数据库的客户端或DSN应该就可以了。如果是任意的IP,应该要用的socket技术。要写服务端/客户端应用程序才可以访问吧。
      

  5.   

    bt=(_bstr_t)("Provider=sqloledb;Network Library=DBMSSOCN;Data Source="+m_host+",1433;Initial Catalog="+dbname+";User ID="+usr+";Password="+pwd);
    我这个可以,Internet也可以连
    别忘了端口要打开
      

  6.   

    constr.Format("Provider=sqloledb;Data Source=%s;persist security info=false;Initial Catalog=Data;User Id=%s;Password=%s",server,name,psw);
    //server,name,psw;分别表示服务器名,用户名,密码我就是这么用的,用名字和IP都可以表示