【原创】请教:在C语言与数据库连接中遇到难题了!

【原创】请教:在C语言与数据库连接中遇到难题了!

小女子向高人请教:

源程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sql.h"
#include "sqlext.h"

void
check_return (RETCODE rc,
              HENV henv,
              HDBC hdbc,
              HSTMT hstmt )
{
  UCHAR state_str [SQL_MAX_MESSAGE_LENGTH];
  SDWORD native_error;
  UCHAR  error_msg [SQL_MAX_MESSAGE_LENGTH];
  SWORD  error_msg_avail = SQL_MAX_MESSAGE_LENGTH - 1;
  SWORD  error_msg_len;
  RETCODE local_rc;

  if (rc != SQL_ERROR && rc != SQL_SUCCESS_WITH_INFO )
  {
    return;
  }


  local_rc = SQL_Error (henv,hdbc,hstmt,state_str,&native_error,error_msg,error_msg_avail,&error_msg_len);
  if (local_rc != SQL_SUCCESS && rc !=SQL_SUCCESS_WITH_INFO)
  {
    fprintf(stderr,"Uninterpretable error; exiting \n");
    exit (EXIT_FAILURE);
  }

  if (rc == SQL_SUCCESS_WITH_INFO)
  {
    fprintf(stderr,"Fatal Error %s: %s\n", state_str,error_msg);
    return;
  }

   fprintf(stderr,"Fatal Error %s: %s\n",state_str,error_msg);
   exit (EXIT_FAILURE);
}

/*----------------------------------------------------------------------*/
int main (void)
{
    HENV henv = SQL_NULL_HENV;
    HDBC hdbc = SQL_NULL_HDBC;
    HSTMT hstmt = SQL_NULL_HSTMT;
    RETCODE rc;

    char buf[257];
    short buflen;
   
    printf ("Initialize the environment structure.\n");
    SQLAllocEnv (&henv);
  
    printf ("Initialize the connection structure.\n");
    SQLAllocConnect (henv,&hdbc);

    printf("Load the ODBC driver.\n");
    rc = SQLDriverConnect (hdbc,0,"DSN=baseball;UID=myloginWD=mypassword",SQL_NTS,(UCHAR*) buf,sizeof (buf),&buflen,SQL_DRIVER_COMPLETE);
    check_return (rc,henv,hdbc,hstmt);
   
    printf ("Initialize the statement structure.\n");
    SQLAllocStmt (hdbc,&hstmt);
   
/*   now do something*/
    printf ("Creat table table \"foo\".\n");
    rc = SQLExecdirect (hstmt,"CREATE TABLE foo (bar INTEGER)", SQL_NTS);
    check_return (rc, henv, hdbc, hstmt);
   
    printf ("Insert values into table \"foo\".\n");
    rc = SQLExecdirect (hstmt,"INSERT INTO foo(bar) VALUES (1)", SQL_NTS);
    check_return (rc, henv, hdbc, hstmt);
   
    rc = SQLExecdirect (hstmt,"INSERT INTO foo(bar) VALUES (2)", SQL_NTS);
    check_return (rc, henv, hdbc, hstmt);

    rc = SQLExecdirect (hstmt,"INSERT INTO foo(bar) VALUES (3)", SQL_NTS);
    check_return (rc, henv, hdbc, hstmt);

    printf ("Drop table \"foo\".\n");
    rc = SQLExecDirect (hstmt, "DROP TABLE foo", SQL_NTS);
    check_return (rc,henv,hdbc,hstmt);

/*  We're done:free resources and exit*/

   printf ("Free the statement handle.\n");
   SQLFreeStmt (hstmt,SQL_DROP);
  
   printf ("Disconnect from the data source.\n");
   SQLDisconnect (hdbc);

   printf ("Free the connection structure.\n");
   SQLFreeConnect (hdbc);

   printf ("Free the environment structure.\n");
   SQLFreeEnv (henv);

   printf ("Goodbye!\n");
   exit (EXIT_SUCCESS);
}


我的程序编译、连接的结果是:
[root@localhost database_experiment]# gcc odbc.c
/tmp/ccldHxyK.o(.text+0x5a): In function `check_return':
: undefined reference to `SQLError'
/tmp/ccldHxyK.o(.text+0x130): In function `main':
: undefined reference to `SQLAllocEnv'
/tmp/ccldHxyK.o(.text+0x152): In function `main':
: undefined reference to `SQLAllocConnect'
/tmp/ccldHxyK.o(.text+0x18b): In function `main':
: undefined reference to `SQLDriverConnect'
/tmp/ccldHxyK.o(.text+0x1c7): In function `main':
: undefined reference to `SQLAllocStmt'
/tmp/ccldHxyK.o(.text+0x1ec): In function `main':
: undefined reference to `SQLExecdirect'
/tmp/ccldHxyK.o(.text+0x22b): In function `main':
: undefined reference to `SQLExecdirect'
/tmp/ccldHxyK.o(.text+0x25a): In function `main':
: undefined reference to `SQLExecdirect'
/tmp/ccldHxyK.o(.text+0x289): In function `main':
: undefined reference to `SQLExecdirect'
/tmp/ccldHxyK.o(.text+0x2c8): In function `main':
: undefined reference to `SQLExecDirect'
/tmp/ccldHxyK.o(.text+0x302): In function `main':
: undefined reference to `SQLFreeStmt'
/tmp/ccldHxyK.o(.text+0x320): In function `main':
: undefined reference to `SQLDisconnect'
/tmp/ccldHxyK.o(.text+0x33e): In function `main':
: undefined reference to `SQLFreeConnect'
/tmp/ccldHxyK.o(.text+0x35c): In function `main':
: undefined reference to `SQLFreeEnv'
collect2: ld returned 1 exit status


我的头文件都装全了啊!不知为什么?恳请高人指点!!万分感谢!      
应在 /usr/include 和 /usr/lib 中建立链接到 mysql 的 include 和 lib 目录中,你的程序使用
  # i n c l u d e   < m y s q l / X X X . h >
就可以引用 mysql 的头文件。

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

ln -s /usr/local/mysql/include/mysql /usr/include/mysql

其中的路径及文件、文件夹名根据你的情况进行相应修改,比如在 mysql-5.0.0 中:

ln -s /usr/local/mysql/lib /usr/lib/mysql

ln -s /usr/local/mysql/include /usr/include/mysql

只要它的头文件能正常的引用就可以了。      
多谢二楼大侠的指点,我把那些相关文件直接考到了/usr/include  和 /usr/lib目录下了,可是编译结果还和以前一样。程序中涉及到的一些宏定义都可以编译过去(是否说明头文件已经被正常引用了?),但函数却调用不了,问题是不是出在“连接“中,(编译过程应该没有问题是吗?)是不是我的什么东西没有装好?
      这个程序调不出来我很着急。
      我是个初学者,有些问题可能表述的不是很明确,望大侠们多多包含,多多指点!      
gcc -g connect_db.c -L/usr/lib/mysql -lmysqlclient -lz
注意路径, 参考这里的文档:
http://forums.devshed.com/t2352/s.html?highlight=perl+mysql+connection(DBI.pm)      
非常感谢Roc.Ken 大侠.大侠果然厉害!!我的问题也解决了!!      
非常感谢Roc.Ken 大侠.大侠果然厉害!!我的问题也解决了!!      
==求救====求救====求救====求救====求救====求救====求救====求救====求救====求救====求救==
我在我人C程序里面加载了数据库,但在make的时候出了问题,Makefile文件里我有加载数据库驱动,在C程序也有包含相应的头文件我用的是RH Linux 7.3.数据库是MyODBC-3.51.10-pc-linux-i686,ODBC是unixODBC-2.2.1.在终端make的时候出现错误码是:
/usr/local/lib/l ibmyodbc.so: undefined reference to `__ctype_b_loc@GLIBC_2.3'
/usr/local/lib/l ibmyodbc.so: undefined reference to `realpath@GLIBC_2.3'
collect2: ld returned 1 exit status
make: *** [HlinkConsole] Error 1      
各位大哥大姐,大侠们,小弟急须求教:C语言与excel电子表格如何连接?
比如EXCEL表格中有大量数据需要处理,不得不编程搞定,可不知道C语言与之如何连接,

哪位知道望不吝赐教!多谢多谢1:p      
请问LZ是怎样将
#include "sql.h"
#include "sqlext.h"
引入的,是自己手写的还是系统提供的阿?
另外我用的是FC6,在系统安装时就装好了MySQL,并且可以用,但是我在/usr/local/没有mysql目录,请问知道是为什么么?      
:Q :Q :Q