小弟真的快被他弄疯了,也许自己知识不够全面吧,现把疑点与大家讨论一下,也许自己水平有限,希望各位多多指点:疑点一:在dll里面用ado 连接sqlserver, 连接信息没有错,但是就是不能与数据库建立连接,而奇怪的就是,用相同的代码,用access的连接信息却可以很正常的连接access数据库。疑点二:还是用相同的代码,在mfc exe application下面连接sqlserver就可以很正常的连接数据库,用access连接也可以//////////////////////////调试2///////////////////////////////
::CoInitialize(NULL);///初始化COM库
_ConnectionPtr m_pConnection;
// _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
hr = m_pConnection.CreateInstance( __uuidof ( Connection ) );///创建Connection对象
if(SUCCEEDED(hr)) {
//access可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server不行
hr = m_pConnection->Open("Provider=SQLOLEDB;Data Source=ricky;Initial Catalog=dbTest; User ID=sa;Password=","","",adModeUnknown);///连接数据库
MessageBeep(MB_OK);
}
}
catch(_com_error e) { ///捕捉异常
MessageBeep(MB_ICONASTERISK);
}//////////////////////////////////////////////////////////
换成下面的代码还是相同的疑点://////////////////////////调试1///////////////////////////////
AfxOleInit();///初始化COM库
_ConnectionPtr m_pConnection;
// _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
PlayText("1");
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr)) {
//accss可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server就是不行,真搞不懂.....:(
hr = m_pConnection->Open("Provider=sqloledb;Data Source=ricky;Initial Catalog=dbTest;Integrated Security=SSPI;","","",adModeUnknown); //连接数据库
PlayText("2");
}
}
catch(_com_error e) { ///捕捉异常
PlayText("错误");
}
////////////////////////////////////////////////////////////////
如能解决问题,1000分送给高手们我都值得。急!!!!!!!!!
::CoInitialize(NULL);///初始化COM库
_ConnectionPtr m_pConnection;
// _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
hr = m_pConnection.CreateInstance( __uuidof ( Connection ) );///创建Connection对象
if(SUCCEEDED(hr)) {
//access可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server不行
hr = m_pConnection->Open("Provider=SQLOLEDB;Data Source=ricky;Initial Catalog=dbTest; User ID=sa;Password=","","",adModeUnknown);///连接数据库
MessageBeep(MB_OK);
}
}
catch(_com_error e) { ///捕捉异常
MessageBeep(MB_ICONASTERISK);
}//////////////////////////////////////////////////////////
换成下面的代码还是相同的疑点://////////////////////////调试1///////////////////////////////
AfxOleInit();///初始化COM库
_ConnectionPtr m_pConnection;
// _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
PlayText("1");
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr)) {
//accss可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server就是不行,真搞不懂.....:(
hr = m_pConnection->Open("Provider=sqloledb;Data Source=ricky;Initial Catalog=dbTest;Integrated Security=SSPI;","","",adModeUnknown); //连接数据库
PlayText("2");
}
}
catch(_com_error e) { ///捕捉异常
PlayText("错误");
}
////////////////////////////////////////////////////////////////
如能解决问题,1000分送给高手们我都值得。急!!!!!!!!!
::CoInitialize(NULL); try
{
hr=m_pCnn.CreateInstance("ADODB.Connection");
sprintf(buf,"Provider=SQLOLEDB.1;Persist Security Info=False;Password=%s;User ID=sa;Initial Catalog=MYDB;Data Source=%s",strPwd,m_strServerName);
if(SUCCEEDED(hr))
{
hr=m_pCnn->Open(buf,"","",-1);
}
} catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
bSucc = FALSE;
}
catch(CException *e)
{
e->ReportError();
bSucc = FALSE;
}
catch(...)
{
AfxMessageBox("网络出错,联接不到数据库!");
bSucc = FALSE;
}
//注意结束时要关闭COM
不在DLL中,如果你用ODBC的方法能通过,用Ado这种方法一定通过的.
1.ricky是SQL server所在服务器的名字吗?
2.把adModeUnknown改为adConnectUnspecified试试
3.Password是空的吗?
4.要调用::CoUninitialize();
另外试试用OLE DB Provider for ODBC。
constr="Driver={SQL Server};SERVER=towin;USER ID=Ricky;PASSWORD=123;DATABASE=dbTest"
'constr="Provider=SQLOLEDB;Data Source=towin;Initial Catalog=dbTest; User ID=Ricky;Password=123"
'Application("strConn")=constr
err.Clear
set con=server.CreateObject ("adodb.connection")
con.Open constr
if err <> 0 then
Response.Write "数据库连接不正确!"
end if
con.Close
set con=nothing
%>我用了以下的代码,得出了错误信息
****************************
Error!
Code=80004005
Code meaning=未指定的错误
Source=Microft OLE DB Provider for SQL Server
Desciption=不能装载通讯模块。驱动程序安装不正确。
**************************** AfxOleInit();///初始化COM库
_ConnectionPtr m_pConnection;
// _RecordsetPtr m_pRecordset;
////////////连接数据库//////////////
HRESULT hr;
try {
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr)) {
//accss可以
//hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb","","",adModeUnknown);///连接数据库
//sql server就是不行,真搞不懂.....:(
hr = m_pConnection->Open("Provider=SQLOLEDB;Data Source=towin;Initial Catalog=dbTest; User ID=Ricky;Password=123","","",adModeUnknown);///连接数据库
PlayText("正确");
}
}
catch(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "Error!\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n ",
e.Error(), e.ErrorMessage(), (LPCSTR)bstrSource, (LPCSTR)bstrDescription );
#ifdef _DEBUG
AfxMessageBox( ErrorStr, MB_OK | MB_ICONERROR );
#endif
}