急求啊如何实现c++/vc连接数据库举个详细的实例,各位大侠,小弟刚学数据库,学的语言是出c++,谢谢各位大哥多多帮忙

解决方案 »

  1.   


    这个问题,我不知道你的基础有多少,大体说一下,你先编一个文件,名叫ODBCTest.c 在VC++6.0中新建一个Win32 Console Application的项目,并将项目命名为ODBCTest. 
    然后,将已经写好的ODBCTest.c文件加入到该项目的Source Files中,编译并且执行.执行完成后,SQL Server中Student表的数据即为Kingbase中Student表的数据备份. 
    实验源代码.以下源码,给出了一些注释,供参考. 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define SNO_LEN 30 
    #define NAME_LEN 50 
    #define DEPART_LEN 100 
    #define SSEX_LEN 5 
    int main() 

    /* Step 1 定义句柄和变量 */ 
    //以king开头的表示的是连接KINGBASEES的变量 
    //以server开头的表示的是连接SQLSERVER的变量 
    SQLHENV kinghenv, serverhenv; //环境句柄 
    SQLHDBC kinghdbc,serverhdbc; //连接句柄 
    SQLHSTMT kinghstmt,serverhstmt; //语句句柄 
    SQLRETURN ret; 
    SQLCHAR sName[NAME_LEN], sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN]; 
    SQLINTEGER sAge; 
    SQLINTEGER cbAge = 0, cbSno = SQL_NTS, cbSex = SQL_NTS,cbName = SQL_NTS,cbDepart = SQL_NTS; 
    /* Step 2 初始化环境 */ 
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &kinghenv); 
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &serverhenv); 
    ret = SQLSetEnvAttr(kinghenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
    ret = SQLSetEnvAttr(serverhenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
    /* Step 3 :建立连接 */ 
    ret = SQLAllocHandle(SQL_HANDLE_DBC, kinghenv, &kinghdbc); 
    ret = SQLAllocHandle(SQL_HANDLE_DBC, serverhenv, &serverhdbc); 
    ret = SQLConnect(kinghdbc, 
    "KingbaseES ODBC",SQL_NTS, 
    "SYSTEM",SQL_NTS, 
    "MANAGER",SQL_NTS); 
    if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值 
    return -1; 
    ret = SQLConnect(serverhdbc, 
    "SQLServer",SQL_NTS, 
    "sa",SQL_NTS, 
    "sa",SQL_NTS); 
    if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值 
    return -1; 
    /* Step 4 :初始化语句句柄 */ 
    ret = SQLAllocHandle(SQL_HANDLE_STMT, kinghdbc, &kinghstmt); 
    ret = SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER ); ret = SQLAllocHandle(SQL_HANDLE_STMT, serverhdbc, &serverhstmt); 
    /* Step 5 :两种方式执行语句 */ /* 预编译带有参数的语句 */ 
    ret = SQLPrepare(serverhstmt,"INSERT INTO STUDENT (SNO,SNAME,SSEX,SAGE,SDEPT) VALUES ( , , , , )", SQL_NTS); 
    if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) 

    ret = SQLBindParameter(serverhstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, SNO_LEN, 0, sSno, 0, &cbSno); 
    ret = SQLBindParameter(serverhstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, NAME_LEN, 0, sName, 0, &cbName); 
    ret = SQLBindParameter(serverhstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 2, 0, sSex, 0, &cbSex); 
    ret = SQLBindParameter(serverhstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &sAge, 0, &cbAge); 
    ret = SQLBindParameter(serverhstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, DEPART_LEN, 0, sDepart, 0, &cbDepart); 
    } /*执行SQL语句*/ 
    ret = SQLExecDirect(kinghstmt,"SELECT * FROM STUDENT",SQL_NTS); 
    if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) 

    ret = SQLBindCol(kinghstmt, 1, SQL_C_CHAR,sSno,SNO_LEN, &cbSno); 
    ret = SQLBindCol(kinghstmt, 2, SQL_C_CHAR, sName, NAME_LEN, &cbName); 
    ret = SQLBindCol(kinghstmt, 3, SQL_C_CHAR, sSex, SSEX_LEN, &cbSex); 
    ret = SQLBindCol(kinghstmt, 4, SQL_C_LONG, &sAge, 0, &cbAge); 
    ret = SQLBindCol(kinghstmt, 5, SQL_C_CHAR, sDepart, DEPART_LEN, &cbDepart); 
    }
      

  2.   


    void smsLogon::InitSQLServer(CString server, CString db, CString UserName, CString Pwd){m_pConnection.CreateInstance("ADODB.Connection");CString strCn;strCn.Empty();strCn="provider=SQLOLEDB;data source="+server+";initial catalog="+db+";userID="+UserName+";PassWord="+Pwd;_variant_t bcnstr=_variant_t(strCn);_variant_t bunstr=_variant_t(UserName);_variant_t bpwdstr=_variant_t(Pwd);//打开一个连接try{m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),_bstr_t(bpwdstr),-1);//adOpenUnspecified}catch(_com_error e){CString errormessage;errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__);AfxMessageBox(errormessage);}catch(...){AfxMessageBox("Warning :连接数据库时发生未知错误");}} void smsLogon::ExitDB()     //退出时关闭数据库连接{if(m_pConnection!=NULL){m_pConnection->Close();//关闭连接m_pConnection.Release();//释放对象}} 
      

  3.   

    #import "C:\Program Files\Common Files\System\ado\msado15.dll" \
            no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
      

  4.   

    class ADOConn  
    {
    // 定义变量
    public:
    //添加一个指向Connection对象的指针:
    _ConnectionPtr m_pConnection;
    //添加一个指向Recordset对象的指针:
    _RecordsetPtr m_pRecordset;
    // 定义方法
    public:
    ADOConn();
    virtual ~ADOConn();
    // 初始化—连接数据库
    void  OnInitADOConn();
    // 执行查询
    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
    // 执行SQL语句,Insert Update _variant_t
    BOOL ExecuteSQL(_bstr_t bstrSQL);
    void ExitConnect();
    };
      

  5.   

    void  ADOConn::OnInitADOConn()
    {
    // 初始化OLE/COM库环境 
    ::CoInitialize(NULL);
      
    try
    {
    // 创建Connection对象
    m_pConnection.CreateInstance("ADODB.Connection");
    // 设置连接字符串,必须是BSTR型或者_bstr_t类型
    CString strSRC;
    strSRC="Driver=SQL Server;Server=";
    strSRC+=".";
    strSRC+=";Database=";
    strSRC+="csdn_test";
    strSRC+=";UID=SA;PWD=";
    _bstr_t strConnect(strSRC);
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    // AfxMessageBox("hi ,database !!");
    }
    // 捕捉异常
    catch(_com_error e)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    }
      

  6.   

    vc的:使用odbc
    先建立一个odbc驱动 例如testCDatabase m_db
    在连接数据库的界面对应的类的初始化函数中
    if (!m_db.isopen())
       m_db.open(_t"test")
    然后建立记录集对象Crecordset rs进行记录访问执行sql语句
    m_db.executesql("sql语句")最好找一些实例书看