如何通过IP访问其他机的数据库? 非常苦恼! 我的程序通过输入局域网内机器名可以访问其数据库,但是输入IP地址,就不能连接数据库,请高手给一些思路,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; } sql.Format("Provider=SQLOLEDB.1;Data Source=%s;Initial Catalog=%s;UID=%s; PWD=%s",serverip,databasename,username,userpass); 还是不行啊!!//下面的语句可以连网内的机器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();} 我想:直接访问IP如果在一个网段里只要装数据库的客户端或DSN应该就可以了。如果是任意的IP,应该要用的socket技术。要写服务端/客户端应用程序才可以访问吧。 bt=(_bstr_t)("Provider=sqloledb;Network Library=DBMSSOCN;Data Source="+m_host+",1433;Initial Catalog="+dbname+";User ID="+usr+";Password="+pwd);我这个可以,Internet也可以连别忘了端口要打开 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都可以表示 TCP 窗口大小和缓冲区大小的关系? 构造函数的问题 如何利用对话框类建立工具条? 语法错误(操作符丢失) 可以远程查看别人的注册表吗? 100分!提共源码,请各位大侠下载了,看看能不能帮我解决一下! 有DELETE消息吗? 一个CCriticalSection对象可以保护几个变量? window c编程 我对COMBOBOX控件发送CB_SHOWDROPDOWN消息,下拉框是弹出来了,可是鼠标不见了,怎样才能把鼠标显示出来 如何成组显示隐藏控件? MSDN中ViewEX例子的问题。
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;
}
/* 改后的语句: 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();
}
直接访问IP如果在一个网段里只要装数据库的客户端或DSN应该就可以了。如果是任意的IP,应该要用的socket技术。要写服务端/客户端应用程序才可以访问吧。
我这个可以,Internet也可以连
别忘了端口要打开
//server,name,psw;分别表示服务器名,用户名,密码我就是这么用的,用名字和IP都可以表示