zoukankan      html  css  js  c++  java
  • c语言数据库编程ODBC

    c语言数据库编程

     
    最近我的导师要求我用c语言读出access数据库的数据,我四处查找资料,终于找到了实现的办法,那就是odbc api编程。以前做数据库一直用java和jdbc,要不是用别人封装好的ado,用的很方便,编程也很简单。可用c语言做数据库,以前可是想都没有想过,甚至怀疑它能不能写数据库。在查找资料的过程中,我请教了几个c语言高手,他们的一致答复是c语言做数据库,似乎不可能,劝我不要费心了。可我的导师告诉我,可以做,而且c语言做数据库,可以实现的很好。所以,猛查资料,花了将近一天的时间,终于找到了门路。其实,了解了内幕,还是蛮简单的。现将相关的知识拿出来,和各位高手分享,为新手指路,向前辈展示好学之心。

    c语言连接数据库,直接调用odbc api的函数。我们平常用的odbc或者ado之类,都是封装好了的,一般的编程细节我们是看不到的。尤其在ide里边,我们可以直接用拖放的办法实现数据库连接和操作。而c语言编程中,一切都要自己动手。

    具体说来,数据库的常用操作主要是由这样几个odbc函数完成的:SQLAllocHandle 、SQLConnect、SQLExecute、SQLBindCol、SQLGetData、SQLFetch、SQLDisconnect、SQLEndTran等。一个简单的数据库连接例子如下:

     // Allocate An Environment Handle
     SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&EnvHandle);
     if (EnvHandle != 0)
      SQLSetEnvAttr(EnvHandle, SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,
                    SQL_IS_UINTEGER);

    if (EnvHandle != 0)
      SQLAllocHandle(SQL_HANDLE_DBC, EnvHandle,&ConHandle);
     // Connect To The Appropriate Data Source
     if (ConHandle != 0)
     {
      RetCode = SQLConnect(ConHandle, (SQLCHAR *) "DSN-name",SQL_NTS,
                              (SQLCHAR *) "username",SQL_NTS,
         (SQLCHAR *) "password", SQL_NTS);

    if (ConHandle != 0 && RetCode == SQL_SUCCESS)
      SQLAllocHandle(SQL_HANDLE_STMT, ConHandle,&StmtHandle);

    RetCode=SQLExecDirect(StmtHandle, "SELECT * FROM table-name WHERE ID < 20", SQL_NTS);

    while (RetCode != SQL_NO_DATA)
      {
      RetCode = SQLFetch(StmtHandle);
      if(RetCode != SQL_NO_DATA){
      SQLGetData(StmtHandle, 1, SQL_C_ULONG, &id,sizeof(id), NULL);

    }

    }

    RetCode = SQLEndTran(SQL_HANDLE_DBC, ConHandle,SQL_COMMIT);
     
     /**
      * TERMINATION
      **/
     
     // Free The SQL Statement Handle
     if (StmtHandle != 0)
     SQLFreeHandle(SQL_HANDLE_STMT, StmtHandle);
     // Terminate The Data Source Connection
     if (ConHandle != 0)
     RetCode = SQLDisconnect(ConHandle);
     // Free The Connection Handle
     if (ConHandle != 0)
     SQLFreeHandle(SQL_HANDLE_DBC, ConHandle);
     // Free The Environment Handle
     if (EnvHandle != 0)
     SQLFreeHandle(SQL_HANDLE_ENV, EnvHandle);

    odbc api编程的最权威的书籍是微软的《odbc程序员手册》,网上有中文版可以下载。

    通过阅读odbc资料和编程实践,我深刻的体会到,c语言功能实在太强大了,可以说无所不能。要想成为一位c语言高手,不是很简单的事情,是要吃一点苦头的。记得我的导师给我说,要想成为计算机高手,首先玩转c语言。

    看来我还要努力啊!

  • 相关阅读:
    XTREE随笔
    多重共线性
    常用特征选取算法
    最短路径算法的实现(dijskstra):Python
    数据科学的完整学习路径—Python版(转载)
    windows下64位python的安装及机器学习相关包的安装(实用)
    拓扑排序 详解 + 并查集 详解 + 最小生成树(MST)详解 【普利姆算法 + 优先队列优化 & 克鲁斯卡尔算法】
    最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法 详解
    在linux下部署项目所用到的基本linux命令
    素数筛 模板
  • 原文地址:https://www.cnblogs.com/techstone/p/2761863.html
Copyright © 2011-2022 走看看