CDatabaseApp::CDatabaseApp()
{
m_AppConnString=_T("Driver={SQL Server};Server=192.168.1.104;")
_T("Database=huiyuan;Uid=tao;Pwd=111;"); //初始化连接字符串
m_bConnected=FALSE; //初始化连接标志
}/////////////////////////////////////////////////////////////////////////////
// The one and only CDatabaseApp objectCDatabaseApp theApp;/////////////////////////////////////////////////////////////////////////////
// CDatabaseApp initializationBOOL CDatabaseApp::InitInstance()
{
AfxEnableControlContainer();
HRESULT hRes; //定义返回值变量
try
{
hRes=m_pAppConn.CreateInstance(_T("ADODB.Connection"));
m_pAppConn->ConnectionTimeout=8; //打开数据库连接
hRes=m_pAppConn->Open(_bstr_t((LPCTSTR) m_AppConnString),_T(""),_T(""),adModeUnknown);
if(SUCCEEDED(hRes))
{
m_bConnected=TRUE; //连接成功设置标志位
}
}
catch(_com_error e) //捕捉错误异常
{
CString errormessage; //定义错误显示字符串
errormessage.Format(_T("连接数据库失败 :%s"),e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return FALSE;
}
……
运行结果: 连接数据库失败 :无效指针
小弟初学,书上抄的代码,不懂为什么会出现这样的情况,求指教……
{
m_AppConnString=_T("Driver={SQL Server};Server=192.168.1.104;")
_T("Database=huiyuan;Uid=tao;Pwd=111;"); //初始化连接字符串
m_bConnected=FALSE; //初始化连接标志
}/////////////////////////////////////////////////////////////////////////////
// The one and only CDatabaseApp objectCDatabaseApp theApp;/////////////////////////////////////////////////////////////////////////////
// CDatabaseApp initializationBOOL CDatabaseApp::InitInstance()
{
AfxEnableControlContainer();
HRESULT hRes; //定义返回值变量
try
{
hRes=m_pAppConn.CreateInstance(_T("ADODB.Connection"));
m_pAppConn->ConnectionTimeout=8; //打开数据库连接
hRes=m_pAppConn->Open(_bstr_t((LPCTSTR) m_AppConnString),_T(""),_T(""),adModeUnknown);
if(SUCCEEDED(hRes))
{
m_bConnected=TRUE; //连接成功设置标志位
}
}
catch(_com_error e) //捕捉错误异常
{
CString errormessage; //定义错误显示字符串
errormessage.Format(_T("连接数据库失败 :%s"),e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return FALSE;
}
……
运行结果: 连接数据库失败 :无效指针
小弟初学,书上抄的代码,不懂为什么会出现这样的情况,求指教……
解决方案 »
- 求助,关于CArchive读取CObArray的问题
- VC++卸载后重新安装弹出不能建立DCOM user account in order to register
- post的时候总是返回 302 Object moved
- *(short *)&m_nRxData[2]这个是什么意思
- 中止使用了HOOK的程序
- ~~~~~~~~~想交几个看过或者在看深入浅出MFC2版的朋友~~~~~~~~~~
- 有的网吧里面锁住了一些系统命令,请问能否用手工编一个REG文件,
- 关于线程的问题。
- 有关指针的使用:
- opencv读取tif图像
- 大家帮看看,这是什么字体
- 怎么截取recv函数收到的PASV应答的端口号?
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF") (2)、初始化COM (放在对话框初始化函数里面或者CXXXApp::InitInstance()中)
在MFC中可以用AfxOleInit();非MFC环境中用:
CoInitialize(NULL); (3)、包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr (4)、连接数据库
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout = 0;
hr = m_pConnection->Open( "Provider=SQLOLEDB.1;Password=密码;Persist Security Info=True;User ID=用户名;Initial Catalog=数据库名;Data Source=127.0.0.1(本机)", "", "", adConnectUnspecified);
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->CommandTimeout = 5;
m_pCommand->ActiveConnection = m_pConnection;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s,%s",e.ErrorMessage(),e.Description());
AfxMessageBox(errormessage);///显示错误信息
}
(5)、打开记录集
首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
} ……照着检查一下,看看你是不是每一步都做了,记得数据库操作try catch一下,捕捉一下有意义的错误提示
http://blog.csdn.net/tt2com/archive/2010/10/28/5971283.aspx