为什么小弟我用VC++ 6.0 连接不上SQL sever 2005
为什么我用VC++ 6.0 连接不上SQL sever 2005?
运行的代码:
CoInitialize(NULL); //初始化COM库
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
pConn->ConnectionString="Provider=SQLOLEDB.1;Password=12345678henry;Persist Security Info=True;User ID=sa;Initial Catalog=机床实时监控信息;Data Source=AD48BAD6679A475\SQLEXPRESS";
//为数据库连接对象的连接字符串赋值
pConn->Open(" "," "," ",adConnectUnspecified);
pRst=pConn->Execute("select * from 总表",NULL,adCmdText);
while(!pRst->rsEOF)
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("加工零件号"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
但是运行进行连接时出现错误提示!希望各位高手指点迷津!
------解决方案--------------------
什么错误提示呀?你确认是没连接上数据库?
------解决方案--------------------
先把异常捕捉下来,再看看是什么错误,也好定位啊!
用ADO,一定要try catch。
另外,用其他的数据库连接工具试验一下,是不是能连上,排除数据库服务本身的问题。
Windows自带的“管理工具-〉数据源(ODBC)”也是一个可用测试的链接客户端。
------解决方案--------------------
ConnectionString问题,将Data Source换成指定IP地址。
------解决方案--------------------
vcpConn->Open(" "," "," ",adConnectUnspecified);
open里应该是需要填入如:
//数据库服务器(local),数据库名staff,用户名sa,密码sa
这样的数据库的数据的吧,你这样是空的啊。
------解决方案--------------------
[Quote=引用:]
ConnectionString问题,将Data Source换成指定IP地址。
如果是本机Data Source=.或Data Source=(local)
如果是远程Data Source=指定IP地址
------解决方案--------------------
m_pConnection->Open("Driver={SQL Server};Server=192.168.40.106;Database=Account;User ID=sa;PWD=123456","","",adModeUnknown);
------解决方案--------------------
楼主写得没有错,可以这么用的,但是你后面的Open时的" "空格不正确,中间不能有空格,而是空: ""
所以将你的三对双引号中的空格去掉就可以了,你试一下:
pConn->Open(" "," "," ",adConnectUnspecified);
改为:
pConn->Open("","","",adConnectUnspecified);
//如果还是连不上,就再将后面的adConnectUnspecified换成:adModeUnknown试试。
不过我还是建议用我下面这种方法,你只要将IP改为你的实例名就可以了:
运行的代码:
CoInitialize(NULL); //初始化COM库
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
pConn->ConnectionString="Provider=SQLOLEDB.1;Password=12345678henry;Persist Security Info=True;User ID=sa;Initial Catalog=机床实时监控信息;Data Source=AD48BAD6679A475\SQLEXPRESS";
//为数据库连接对象的连接字符串赋值
pConn->Open(" "," "," ",adConnectUnspecified);
pRst=pConn->Execute("select * from 总表",NULL,adCmdText);
while(!pRst->rsEOF)
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("加工零件号"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
但是运行进行连接时出现错误提示!希望各位高手指点迷津!
------解决方案--------------------
什么错误提示呀?你确认是没连接上数据库?
------解决方案--------------------
先把异常捕捉下来,再看看是什么错误,也好定位啊!
用ADO,一定要try catch。
另外,用其他的数据库连接工具试验一下,是不是能连上,排除数据库服务本身的问题。
Windows自带的“管理工具-〉数据源(ODBC)”也是一个可用测试的链接客户端。
------解决方案--------------------
ConnectionString问题,将Data Source换成指定IP地址。
------解决方案--------------------
vcpConn->Open(" "," "," ",adConnectUnspecified);
open里应该是需要填入如:
//数据库服务器(local),数据库名staff,用户名sa,密码sa
这样的数据库的数据的吧,你这样是空的啊。
------解决方案--------------------
[Quote=引用:]
ConnectionString问题,将Data Source换成指定IP地址。
如果是本机Data Source=.或Data Source=(local)
如果是远程Data Source=指定IP地址
------解决方案--------------------
m_pConnection->Open("Driver={SQL Server};Server=192.168.40.106;Database=Account;User ID=sa;PWD=123456","","",adModeUnknown);
------解决方案--------------------
楼主写得没有错,可以这么用的,但是你后面的Open时的" "空格不正确,中间不能有空格,而是空: ""
所以将你的三对双引号中的空格去掉就可以了,你试一下:
pConn->Open(" "," "," ",adConnectUnspecified);
改为:
pConn->Open("","","",adConnectUnspecified);
//如果还是连不上,就再将后面的adConnectUnspecified换成:adModeUnknown试试。
不过我还是建议用我下面这种方法,你只要将IP改为你的实例名就可以了:
- C/C++ code
//定义数据库连接字符串 _bstr_t ConnectionStr ="Provider=sqloledb;Network Library=DBMSSOCN;Initial Catalog=数据库的名称;User ID=sa;Password=数据库的密码;Data Source=172.16.211.1,1433"; HRESULT hr; try { hr=pConn.CreateInstance(__uuidof(Connection)); if(SUCCEEDED(hr)) { //不使用DNS,而是使用了SQL的实例方法,打开数据库连接 pConn->ConnectionTimeout = 5;///设置超时时间为5秒 hr=pConn->Open(ConnectionStr, "", "", adModeUnknown); } if(SUCCEEDED(hr)) { //成功 } } catch(_com_error &e) { ADOError(e,""); //显示错误的原因,函数在后,你要将定义复制一下放在文件头处否则编译会出错 return FALSE; } void ADOError(_com_error &e,CString strFirstLineText="") //显示ADO错误信息 { ::CoUninitialize(); //先释放COM对象 _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); CString str; str.Format("Code = %08lx", e.Error()); str += "\nMsg: "; str += e.ErrorMessage(); str += "\nSource: "; str += bstrSource; str += "\nDescription: "; str += bstrDescription; if (strFirstLineText=="") { str = "数据库发生错误,信息如下:\n"+str; } else { str = strFirstLineText+str; } AfxMessageBox(str); }