高分急求,MFC中ODBC连接数据库,按总分排序

本人没学过数据库,想问下MFC中应该怎么排序,表是CGAO1 gao1, m_____total_ 是字段名称,应该怎么排序?按总分从大到小排序,请写具体点,在哪个函数添加,格式是什么?谢谢啦

1、建立数据源
有表就可以建立数据源,不管是Access、Excel、SQL Server、MYSQL,都可以建立数据源,方法是:
“控制面板”下点击“管理工具”双击“数据源”,如果是Access和Excel需要指明具体的文件。
2、将下面代码保存到myodbc.h和myodbc.cpp,并添加到MFC工程里。
3、到MFC具体工程的某个启动函数中添加下面的代码:(内容被保存到当前目录下的成绩.txt)
int 工程::OnCreate()
{
MyODBC odbc;
odbc.SetLoginTime(5); //连接数据库的超时值
odbc.Connect((char*)"数据源名字",8,(*)"sa",2,(unsigned char*)"123456",6);
// 上面函数里面,指定数据源、用户名和密码,以及对应的长度(字节为单位)
odbc.DoSQL((unsigned char*)"SELECT m_____total_ FROM [CGAO1 gao1] ORDER BY m_____total_");
// 执行SQL语句,具体是检索内容并以m_____total_大小排序。
int id;
odbc.BindCol(1,SQL_C_ULONG,(char*)&id,4,0)
int retcode;
FILE *pFile;
pFile = fopen("成绩.txt","a+");
while(1)
{
retcode = odbc.Fetch();
if(retcode== SQL_SUCCESS || retcode==SQL_SUCCESS_WITH_INFO)
printf("%30s\t%d\n",name,id);
else
break;
fwrite((char*)&id,1,4,pFile );
return 0;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FILE:MyODBC.h
#ifndef _MYODBC_H_
#define _MYODBC_H_

#include <windows.h>
#include <sqlext.h>
#include <assert.h>

class MyODBC
{
SQLHENV m_hEnv; //环境句柄
SQLHDBC m_hDbc; //连接句柄
SQLHSTMT m_hStmt; //语句句柄
int nError; // 数据库操作过程中可能出现的错误代码
int CloseCursor(); // 关闭上一次SQL查询所使用的游标
int Initial(); // 初始化数据的名种句柄
int FreeAll(); // 与Initial()相反,释放所有句柄资源
public:
void OnMysql();
MyODBC();
~MyODBC();

int SetLoginTime(unsigned int nTime); // 设置最长登录时间,以秒为单位
// 连接指定的数据源
int Connect(SQLCHAR *Server,int nServer,SQLCHAR *user,int nUser,SQLCHAR *password,int npassword);
int DoSQL(SQLCHAR *sql); // 执行指定的SQL语句
int BindCol(int colIndex,int nType,SQLPOINTER Buf,int Lenbuf,long *count); // 将数据表中的表与变量绑定
int Fetch(); // 返回下一条SQL查询结果
int RowCount(); // 返回SQL语句地数据库影响的行数
int GetError();
};
#endif

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MyODBC.cpp
#include "myodbc.h"
#include <stdio.h>
#include <windows.h>

MyODBC::MyODBC()
{
Initial();
}

MyODBC::~MyODBC()
{
FreeAll();
}
int MyODBC::Initial()
{
// 分配环境句柄
nError = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_hEnv);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);
// 设置ODBC环境属性
nError = SQLSetEnvAttr(m_hEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);

// 分配连接句柄
nError = SQLAllocHandle(SQL_HANDLE_DBC,m_hEnv,&m_hDbc);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);

return nError;
}

// 设置最长登录时间
int MyODBC::SetLoginTime(unsigned int nTime)
{
nError = SQLSetConnectAttr(m_hDbc,SQL_ATTR_LOGIN_TIMEOUT,(SQLPOINTER)&nTime,0);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);
return nError;
}

// 连接到数据源
int MyODBC::Connect(SQLCHAR *Server,int nServer,SQLCHAR *User,int nUser,SQLCHAR *pPass,int nPass)
{
nError = SQLConnect(m_hDbc,(SQLCHAR*)Server,nServer,User,nUser,pPass,nPass);

if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);

// 分配语句句柄
nError = SQLAllocHandle(SQL_HANDLE_STMT,m_hDbc,&m_hStmt);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);
return nError;
}

// 执行SQL语句
int MyODBC::DoSQL(SQLCHAR *sql)
{
CloseCursor(); //释放上一个游标
nError = SQLExecDirect(m_hStmt,(SQLCHAR*)sql,SQL_NTS);
if(nError==SQL_ERROR || nError==SQL_INVALID_HANDLE)
assert(0);
return nError;
}

// 对表中的字段进行绑定
int MyODBC::BindCol(int colIndex,int nType,SQLPOINTER Buf,int Lenbuf,long *count)
{
SQLBindCol(m_hStmt,colIndex,nType,Buf,Lenbuf,count);
return nError;
}

// 关闭SQL语句中所使用的游标
int MyODBC::CloseCursor()
{
nError = SQLCloseCursor(m_hStmt);
return nError;
}

// 对于SQL查询下面的封装会返回下一条查询结果
int MyODBC::Fetch()
{
return SQLFetch(m_hStmt);
}

// 释放所有的句柄
int MyODBC::FreeAll()
{
nError = SQLFreeHandle(SQL_HANDLE_STMT,m_hStmt);
nError = SQLDisconnect(m_hDbc);
nError = SQLFreeHandle(SQL_HANDLE_DBC,m_hDbc);
return nError;
}

// 返回SQL语句所影响的行数
int MyODBC::RowCount()
{
long count;
SQLRowCount(m_hStmt,&count);
return count;
}

// 返回最后一次的错误代号
int MyODBC::GetError()
{
return nError;
}
温馨提示:答案为网友推荐,仅供参考
相似回答