如何使用MFC进行数据库查询
2008-04-16 18:45
691 查看
如何使用MFC进行数据库查询
-----gwb2006(转载请保留)
最近因为工作需要,使用MFC访问远程数据库, 遇到一点小麻烦,不过幸好经过努力解决了。呵呵,一点小经验拿出来和大家分享下,希望后来者不会那么麻烦。首先,MFC通过ODBC访问数据库,主要使用两个类,一个是CDataBase,一个是CRecordset。第一个是用于建立数据库连接的,第二个是数据集,用来查询的。步骤如下:
1.实例化一个CDataBase对象,并建立连接
CDataBase database;
database.OpenEx( _T( "DSN=odbclink" ),CDatabase::noOdbcDialog);//odbclink为数据源名称
//判断一下是否正确打开
if(!database.IsOpen())
{
_tprintf(_T"打开失败");
}
2.从CRecordset继承一个类
class myRecorderSet : public CRecordset
...{
public:
myRecorderSet(CDatabase* pDatabase = NULL,CString sSQlstatment = "DNS = test1",int nParam=2);
~myRecorderSet()...{};
void Move( long nrows, WORD wfetchtype );
void SetInputParam(CString sUserID);
DECLARE_DYNAMIC(myRecorderSet)
int m_retreturn_value;
CString m_UserID;
CString m_UserName;
CString m_SqlStatment;
public:
virtual CString GetDefaultConnect(); // Default connection string
virtual CString GetDefaultSQL(); // Default SQL for Recordset
virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};
void AFXAPI RFX_Textout(CFieldExchange * pfx, LPCTSTR szname,
CString& value, int nmaxlength, int ncolumntype, short nscale);
IMPLEMENT_DYNAMIC(myRecorderSet,CRecordset)
myRecorderSet::myRecorderSet(CDatabase* pdb,CString Sqlstatment,int nParam):CRecordset(pdb)
...{
m_UserID="";
m_UserName="";
m_nDefaultType = snapshot;
m_SqlStatment = Sqlstatment;
m_nParams=nParam;
}
CString myRecorderSet::GetDefaultConnect()
...{
return _T(m_SqlStatment);
}
CString myRecorderSet::GetDefaultSQL()
...{
return _T("");
}
void myRecorderSet::DoFieldExchange(CFieldExchange* pFX)
...{
pFX->SetFieldType(CFieldExchange ::outputParam); //set the field type to outputParam for the return value
RFX_Int(pFX, _T("@RETURN_VALUE"), m_retreturn_value); //bind the return value to the variable
pFX->SetFieldType(CFieldExchange ::inputParam); //reset the field type to inputParam
RFX_Text(pFX, "@issd", m_UserID); //,255,SQL_CHAR,0);
pFX->SetFieldType(CFieldExchange ::outputParam);
RFX_Text(pFX, "@nsssame", m_UserName); //bind the @m_UserName to the m_UseraName
}
/**//////////////////////////////////////////////////////////////////////////////
// myRecorderSet diagnostics
#ifdef _DEBUG
void myRecorderSet::AssertValid() const
...{
CRecordset::AssertValid();
}
void myRecorderSet::Dump(CDumpContext& dc) const
...{
CRecordset::Dump(dc);
}
#endif
void myRecorderSet::Move(long nrows, WORD wfetchtype)
...{
if (m_nFields)
CRecordset ::Move(nrows, wfetchtype);
else
m_bBOF = m_bEOF = true;
}
void myRecorderSet::SetInputParam(CString sUserID)
...{
m_UserID= sUserID;
}
未完待续......................
相关文章推荐
- 如何使用R语言链接数据库并对数据库中的表进行查询操作
- [原创]修正SubSonic v2.2.1的一处BUG,以及如何使用SubSonic进行多表查询、子查询以及数据库分页
- [原创]修正SubSonic v2.2.1的一处BUG,以及如何使用SubSonic进行多表查询、子查询以及数据库分页
- phoenix 如何优化成使用索引进行查询源码分析
- 使用mysqli方式进行数据库查询
- 如何使用adb 命令查询数据库
- Java 8:如何使用流方式查询数据库?
- 如何使用ANT自动进行数据库的相关操作
- 如何使用dojo.query 进行DOM查询和批量操作
- web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
- 如何使用VS2010来进行基于MFC4.2的开发
- 如何使用sql查询数据库表结构的设计(sqlserver,oracle)
- 如何使用sql查询数据库表结构的设计(sqlserver,oracle)
- php+mysqli使用预处理技术进行数据库查询的方法
- Hibrenate中如何使用Like进行查询
- [ZT]如何使用Erwin进行基于MYSQL的数据库设计
- ArcGIS API for JavaScript 4.2学习笔记[23] 没有地图如何进行查询?【FindTask类的使用】
- 如何恢复一个非用户sa创建的数据库,且使用原用户创建者进行访问
- 如何使用Ado.net对数据库进行增删改操作
- 使用NSPredicate进行数据库查询