12 个解决方案
#1
VC++下使用ADO编写数据库程序
准备:
(1)、引入ADO类
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM
在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();
(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr
1.连接和关闭数据库 (1)连接
例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭
//如果数据库连接有效
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;
2.打开一个记录集
(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int nCount = m_pRecordset->GetRecordCount();
m_pRecordset->Close();
m_pConnection->Close();
准备:
(1)、引入ADO类
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM
在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();
(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr
1.连接和关闭数据库 (1)连接
例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭
//如果数据库连接有效
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;
2.打开一个记录集
(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int nCount = m_pRecordset->GetRecordCount();
m_pRecordset->Close();
m_pConnection->Close();
#2
#3
1楼的大大写得很详细了
#4
一楼写得是很好,最关键的语句就是用一条
int nCount = m_pRecordset->GetRecordCount();
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
nCount++;
pRs->MoveNext();
}
int nCount = m_pRecordset->GetRecordCount();
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
nCount++;
pRs->MoveNext();
}
#5
为了获取记录总数而读取整个表,效率太低;
直接返回记录数好了:
select count(*) from table
var = pRs->GetCollect(0L);
另外,用静态方式打开记录集
int nCount = m_pRecordset->GetRecordCount();
就不会返回 -1 了。
直接返回记录数好了:
select count(*) from table
var = pRs->GetCollect(0L);
另外,用静态方式打开记录集
int nCount = m_pRecordset->GetRecordCount();
就不会返回 -1 了。
#6
select count(*) from table
这多省事啊
#7
rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();
#8
这个好啊,简单实用快速~`~
#9
7楼正解
#10
我用动态的方式打开的,为什么会得到-1啊????
#11
还是带星星的强。
#12
使用四楼的方法,安全可靠。。。
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!
#1
VC++下使用ADO编写数据库程序
准备:
(1)、引入ADO类
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM
在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();
(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr
1.连接和关闭数据库 (1)连接
例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭
//如果数据库连接有效
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;
2.打开一个记录集
(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int nCount = m_pRecordset->GetRecordCount();
m_pRecordset->Close();
m_pConnection->Close();
准备:
(1)、引入ADO类
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM
在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();
(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr
1.连接和关闭数据库 (1)连接
例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭
//如果数据库连接有效
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;
2.打开一个记录集
(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int nCount = m_pRecordset->GetRecordCount();
m_pRecordset->Close();
m_pConnection->Close();
#2
#3
1楼的大大写得很详细了
#4
一楼写得是很好,最关键的语句就是用一条
int nCount = m_pRecordset->GetRecordCount();
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
nCount++;
pRs->MoveNext();
}
int nCount = m_pRecordset->GetRecordCount();
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
nCount++;
pRs->MoveNext();
}
#5
为了获取记录总数而读取整个表,效率太低;
直接返回记录数好了:
select count(*) from table
var = pRs->GetCollect(0L);
另外,用静态方式打开记录集
int nCount = m_pRecordset->GetRecordCount();
就不会返回 -1 了。
直接返回记录数好了:
select count(*) from table
var = pRs->GetCollect(0L);
另外,用静态方式打开记录集
int nCount = m_pRecordset->GetRecordCount();
就不会返回 -1 了。
#6
select count(*) from table
这多省事啊
#7
rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();
#8
这个好啊,简单实用快速~`~
#9
7楼正解
#10
我用动态的方式打开的,为什么会得到-1啊????
#11
还是带星星的强。
#12
使用四楼的方法,安全可靠。。。
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!