最近在研究MFC的ODBC数据库操作,想不到一开始就遇到这个绕不过去的问题,各位大神救命啊,困扰几天了~
用向导建立了一个单文档MFC项目,数据库支持头文件。
CDatabase m_db;
try{
// 数据库代码
m_db.Open(_T("login"));//<<--就是这里输入的警告
if(m_pReset==NULL)
m_pReset=new CRecordset();
m_pReset->m_pDatabase=&m_db;
if(!m_pReset->Open())//<<--然后在这里出错,未抛出CDBException异常
{
AfxMessageBox(_T("get recordset faild!"));
return FALSE;
}
}
catch(CDBException* pEx)
{
pEx->ReportError();
pEx->Delete();
}
调试输出的错误
Warning: ODBC Success With Info, _CrtDbgReport: String too long or IO Error_CrtDbgReport: String too long or IO ErrorDBMS: MySQL
Version: 5.5.24-log
ODBC Driver Manager Version: 03.52.0000
什么方法都试过了m_db.Open(_T("login"));这一句始终要输出两个 _CrtDbgReport: String too long or IO Error警告
测试过Accress、sql server、mysql三种数据库。。
测试过m_db.Open(NULL);通过对话框选择数据源。。
下载了一个网上的odbc实例:
CString mSqlStr;
CDatabase m_db;
CLoginDataSet rs;
rs.m_pDatabase=&m_db;
// m_db.Open(NULL,FALSE,FALSE,"ODBC;DNS=Login;UID=root;PWD=123456",FALSE);
m_db.Open(_T("login"));//<<--他这里却未出警告。。运行也无任何异常
UpdateData(TRUE);
实在不知道出了啥问题,跪求各位大神赐教啊。。。
跪下求助。。MFC的ODBC。CDatabase::open()异常
答案:2 悬赏:0 手机版
解决时间 2021-02-20 20:40
- 提问者网友:战魂
- 2021-02-20 17:26
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-02-20 17:46
这样就对了,要加sql语句的
CDatabase m_db;
CRecordset *m_pReset = NULL;
try{
// 数据库代码
if(!m_db.OpenEx(_T("DSN=Xtreme Sample Database 2008 CHS"), CDatabase::openReadOnly|CDatabase::noOdbcDialog)) return;
//if(!m_db.Open(_T("Xtreme Sample Database 2008 CHS")))
//return;
if(m_pReset==NULL)
m_pReset=new CRecordset();
m_pReset->m_pDatabase=&m_db;
if(!m_pReset->Open(CRecordset::snapshot,_T( "Select * from 财务" ) ))
{
AfxMessageBox(_T("get recordset faild!"));
return ;
}
}
catch(CDBException* pEx)
{
pEx->ReportError();
pEx->Delete();
}
m_pReset->Close();
m_db.Close();
CDatabase m_db;
CRecordset *m_pReset = NULL;
try{
// 数据库代码
if(!m_db.OpenEx(_T("DSN=Xtreme Sample Database 2008 CHS"), CDatabase::openReadOnly|CDatabase::noOdbcDialog)) return;
//if(!m_db.Open(_T("Xtreme Sample Database 2008 CHS")))
//return;
if(m_pReset==NULL)
m_pReset=new CRecordset();
m_pReset->m_pDatabase=&m_db;
if(!m_pReset->Open(CRecordset::snapshot,_T( "Select * from 财务" ) ))
{
AfxMessageBox(_T("get recordset faild!"));
return ;
}
}
catch(CDBException* pEx)
{
pEx->ReportError();
pEx->Delete();
}
m_pReset->Close();
m_db.Close();
全部回答
- 1楼网友:玩家
- 2021-02-20 18:23
报什么错误呢?
最好使用try catch语句,捕获报错异常.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯