rt,谢了

解决方案 »

  1.   

    linux 下一般是直接用C API啊。并且MYSQL好象没有发布官方的LINUXODBC connector.
      

  2.   

    linux下有非常有名的unixODBC,它自带mysql和pgsql的odbc驱动。很好用的。
      

  3.   

    怎么这么相似的问题,上次有个家伙到我们公司来面试,我们的头让我出了个小题目:其中就有linux下odbc的使用方法,也就是连接过程吧:
    我简单的说一下吧:
    首先得有odbc驱动程序吧,oracle,还有unixODBC都是可以使用得,然后就会是配置数据源了。这个是在server端完成的。
    在代码中当然是连接数据库,写sql 语句查询,断开等等了。
    这个是连接的:
     //分配环境句柄
        m_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv);       
        m_retcode = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION,  (void*)SQL_OV_ODBC3, 0);
        
        //分配链接句柄
        m_retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_odbc);    
        
        //链接数据库
        m_retcode = SQLConnect(m_odbc,  (SQLCHAR*)cpServerName, SQL_NTS, 
                                        (SQLCHAR*)cpUserName, SQL_NTS,
                                        (SQLCHAR*)cpPassword, SQL_NTS);   
    下边是查询的:
     //分配句柄
        m_retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_odbc, &m_hstmt);    
        //绑定列
        SQLINTEGER  outid;    
        SQLINTEGER outidlen;    //返回的数据长度
        SQLBindCol(m_hstmt, 1, SQL_C_SLONG, &outid, sizeof(outid), &outidlen);       int ntId = iputid;
        SQLINTEGER nSQLTestValue = 0;
        //绑定参数
        m_retcode = SQLBindParameter(m_hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ntId, 0, &nSQLTestValue);    //根据SQL语句查询信息
        char szSQLA[] = "select distinct NUMBER from table where ID = ?";
        m_retcode = SQLExecDirect(m_hstmt, (unsigned char *)szSQLA, SQL_NTS);   
        while ((m_retcode=SQLFetch(m_hstmt)) != SQL_NO_DATA)
        {
           //int result = outid;
         }   
        //clear
        SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt);
        m_hstmt = NULL;
    写的粗糙,见笑了。
      

  4.   

    说实话,在window下的几种访问方式,向ADO,ODBC 。代码和你的差不多,但是移植到linux下就有问题,由于我是初学linux,所以很多东西不大懂,呵呵……
    头说我在安装的时候没把组件装全(没有完全安装),后来我也在那上面安装了组件包,结果找不到ODBCConfig文件,编译没有问题,只是无法找到驱动等。
    现在重新安装了系统,看看能不能解决。
    我才刚到公司上班,那以后得多多想你请教了。呵呵……
      

  5.   


    为什么要用图形界面呢,只要你了解odbc.ini以及odbcinst.ini文件格式,完全可以自己写配置文件。
    odbcinst命令行程序一样可以导入文本数据源。
      

  6.   

    我不知道你用的是哪个发行版的linux,所以假设你是用一般的普通linux发行版好了。
    假设你安装不上ODBCConfig。只有命令行版本。假设你要使用的还是ASE数据库的ODBC驱动,
    命令:/usr/bin/odbcinst -i -d -f drivertemplate.txt
    驱动样例文件如下:(drivertemplate.txt)
    [Adaptive Server Enterprise]
    Description = Sybase ODBC Driver
    Driver = /opt/sybase/ODBC-12_5/lib/libsybdrvodb.so
    FileUsage = -1
    可以安装一个ODBC驱动 
    命令:/usr/bin/odbcinst -i -s -f sampletemplate.txt
    可以装一个数据源
    数据源样例文件如下:(sampletemplate.txt)
    [sampledsn]
    Description = Sybase ODBC Data Source
    UserID = sa
    Password =
    Driver = Adaptive Server Enterprise
    Server   = sampleserver
    Port = 4100
    Database = pubs2
    UseCursor = 1MySQL的驱动及数据源样例文件,内容如下:
    ;
    ;  odbc.ini configuration for MyODBC and MyODBC 3.51 Drivers
    ;[ODBC Data Sources]myodbc      = MySQL ODBC 2.50 Driver DSN 
    myodbc3     = MySQL ODBC 3.51 Driver DSN 
    [myodbc]
    Driver       = /usr/local/lib/libmyodbc.so
    Description  = MySQL ODBC 2.50 Driver DSN
    SERVER       = localhost
    PORT         =
    USER         = root
    Password     =
    Database     = test
    OPTION       = 3
    SOCKET       = 
    [myodbc3]
    Driver       = /usr/local/lib/libmyodbc3.so
    Description  = MySQL ODBC 3.51 Driver DSN
    SERVER       = localhost
    PORT         =
    USER         = root
    Password     =
    Database     = test
    OPTION       = 3   
    SOCKET       = 
    [Default]
    Driver       = /usr/local/lib/libmyodbc3.so
    Description  = MySQL ODBC 3.51 Driver DSN
    SERVER       = localhost
    PORT         =
    USER         = root
    Password     =
    Database     = test
    OPTION       = 3
    SOCKET       = 
    直接使用后边一个命令就可以安装了。
    安装完以后,一般会在/etc/下更新odbc.ini和odbcinst.ini内容。
    这和ODBCConfig图形界面操作效果一样。
    并且,有些数据库并不支持ODBCConfig操作。所以,还是命令行或者直接手工更新来得方便。ODBC可移植性相当好,除了include头文件稍有不同以外,基本上不用作任何修改。