我在stdafx.h中添加了:#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "adoEOF")然后在AppDlg.cpp的InitInstance()中使用连接:
_ConnectionPtr pConnection1 = NULL;
AfxEnableControlContainer();
AfxOleInit(); try
{
pConnection1->ConnectionString="Provider=SQLOLEDB.1
;Persist Security Info=False;
User ID=sa;Initial Catalog=ADOtest;Data Source=CXL"
pConnection1->ConnectionTimeout=5;
pConnection1->Open("","","",adConnectUnspecified);
}
可是连语法编译都通不过,是不是我还少加了什么东西呢?根使用ADO连接数据库(sql server)一共有那些前期步骤?请告诉我,谢谢大家啊!
是不是COM没有初始化呢?那么应该怎么初始化呢?谢谢
no_namespace rename("EOF", "adoEOF")然后在AppDlg.cpp的InitInstance()中使用连接:
_ConnectionPtr pConnection1 = NULL;
AfxEnableControlContainer();
AfxOleInit(); try
{
pConnection1->ConnectionString="Provider=SQLOLEDB.1
;Persist Security Info=False;
User ID=sa;Initial Catalog=ADOtest;Data Source=CXL"
pConnection1->ConnectionTimeout=5;
pConnection1->Open("","","",adConnectUnspecified);
}
可是连语法编译都通不过,是不是我还少加了什么东西呢?根使用ADO连接数据库(sql server)一共有那些前期步骤?请告诉我,谢谢大家啊!
是不是COM没有初始化呢?那么应该怎么初始化呢?谢谢
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")#include <ole2.h>
#include <stdio.h>
#include <conio.h>// Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void ConnectionStringX();
_bstr_t GetState(int intState);
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);///////////////////////////////////////////////////////////
// //
// Main Function //
// //
///////////////////////////////////////////////////////////void main()
{
if(FAILED(::CoInitialize(NULL)))
return; ConnectionStringX(); //Wait here for user to see the output..
printf("\nPress any key to continue...");
getch(); ::CoUninitialize();
}///////////////////////////////////////////////////////////
// //
// ConnectionStringX Function //
// //
///////////////////////////////////////////////////////////void ConnectionStringX()
{
// Define Connection object pointers.
// Initialize pointers on define.
// These are in the ADODB:: namespace
_ConnectionPtr pConnection1 = NULL;
_ConnectionPtr pConnection2 = NULL;
_ConnectionPtr pConnection3 = NULL;
_ConnectionPtr pConnection4 = NULL; //Define Other Variables
HRESULT hr = S_OK; try
{
// Open a connection using OLE DB syntax.
TESTHR(pConnection1.CreateInstance(__uuidof(Connection)));
pConnection1->ConnectionString = "provider=SQLOLEDB;"
"Data Source=MyServer;Initial Catalog=Pubs;"
"User Id=sa;Password=;";
pConnection1->ConnectionTimeout = 30;
pConnection1->Open("","","",adConnectUnspecified); // Open a connection using a DSN and ODBC tags.
TESTHR(pConnection2.CreateInstance(__uuidof(Connection)));
pConnection2->ConnectionString = "DSN=Pubs;UID=sa;PWD=;";
pConnection2->Open("","","",adConnectUnspecified); // Open a connection using a DSN and OLE DB tags.
TESTHR(pConnection3.CreateInstance(__uuidof(Connection)));
pConnection3->ConnectionString = "Data Source=Pubs;User ID=sa;"
"Password=;";
pConnection3->Open("","","",adConnectUnspecified); // Open a connection using a DSN and individual
// arguments instead of a connection string.
TESTHR(pConnection4.CreateInstance(__uuidof(Connection)));
pConnection4->Open("Pubs","sa","",adConnectUnspecified); // Display the state of the connections.
printf("cnn1 state: %s\n",
(LPCTSTR)GetState(pConnection1->State));
printf("cnn2 state: %s\n",
(LPCTSTR)GetState(pConnection2->State));
printf("cnn3 state: %s\n",
(LPCTSTR)GetState(pConnection3->State));
printf("cnn4 state: %s\n",
(LPCTSTR)GetState(pConnection4->State)); //Cleanup objects before exit.
pConnection4->Close();
pConnection3->Close();
pConnection2->Close();
pConnection1->Close();
} catch(_com_error &e)
{
// Notify user of any errors.
// Pass a connection pointer accessed from the Connection.
PrintProviderError(pConnection1);
if(pConnection2)
PrintProviderError(pConnection2);
if(pConnection3)
PrintProviderError(pConnection3);
if(pConnection4)
PrintProviderError(pConnection4);
PrintComError(e);
}
}///////////////////////////////////////////////////////////
// //
// GetState Function //
// //
///////////////////////////////////////////////////////////_bstr_t GetState(int intState)
{
_bstr_t strState;
switch(intState)
{
case adStateClosed:
strState = "adStateClosed";
break;
case adStateOpen:
strState = "adStateOpen";
break;
default:
;
}
return strState;
}///////////////////////////////////////////////////////////
// //
// PrintProviderError Function //
// //
///////////////////////////////////////////////////////////void PrintProviderError(_ConnectionPtr pConnection)
{
// Print Provider Errors from Connection object.
// pErr is a record object in the Connection's Error collection.
ErrorPtr pErr = NULL; if( (pConnection->Errors->Count) > 0)
{
long nCount = pConnection->Errors->Count; // Collection ranges from 0 to nCount -1.
for(long i = 0; i < nCount; i++)
{
pErr = pConnection->Errors->GetItem(i);
printf("Error number: %x\t%s\n", pErr->Number,
(LPCSTR)pErr->Description);
}
}
}///////////////////////////////////////////////////////////
// //
// PrintComError Function //
// //
///////////////////////////////////////////////////////////void PrintComError(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description()); // Print Com errors.
printf("Error\n");
printf("\tCode = %08lx\n", e.Error());
printf("\tCode meaning = %s\n", e.ErrorMessage());
printf("\tSource = %s\n", (LPCSTR) bstrSource);
printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
}
// EndConnectionStringCpp
是不是少了这两句实例化的代码:
MyDb.CreateInstance("ADODB.Connection");
MySet.CreateInstance("ADODB.Recordset");
在initinstance中还要加上初始化com环境的:
::CoInitialize(NULL);
不然有可能连接过程中出现“无效指针”的问题。
为什么不说清楚你的错误信息是什么呢?
MySet.CreateInstance("ADODB.Recordset");这两句不可少!::CoInitialize(NULL);//这一句可以不要!www.vccode.com第十期上有几篇文章,建议看看!
BOOL CXXXApp::InitInstance()
{
AfxEnableControlContainer(); AfxOleInit();
try
{ m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionTimeout = 8;
//SQL SERVER
// m_pConnection->Open("Driver=SQL Server;Database=stufilemanage;Server=127.0.0.1;UID=sa;PWD=;","","",adModeUnknown);
}
catch(_com_error e)///捕捉异常
{
AfxMessageBox("连接数据库失败!");
return FALSE;
}
....
}