Windows 10下使用C语言通过ODBC链接MySQL数据库

Windows 10下使用C语言通过ODBC链接MySQL数据库

  • Windows 10下使用C语言通过ODBC链接MySQL数据库
    • 安装MySQLConnector/ODBC
    • 配置数据源名称DSN
    • 查看C语言的 ODBC API
    • 编写代码
    • 链接
    • 运行

安装MySQLConnector/ODBC

https://dev.mysql.com/downloads/connector/odbc/
Standardized database driver for Windows, Linux, Mac OS X, and Unix platforms.

配置数据源名称DSN

Windows 10下使用C语言通过ODBC链接MySQL数据库_第1张图片
控制面板->管理工具->ODBC 数据源(32 位)
这里选择32位的原因是因为可能会出现如下问题
http://www.cnblogs.com/guwei4037/p/5666022.html
在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配
然后按官网上的步骤配置即可
Configuring a Connector/ODBC DSN on Windows with the ODBC Data Source Administrator GUI
添加->MySQL ODBC Driver->填写相应的信息
update: 选择在details里面的 Character Set,这里注意需要设置字符集为gbk,以防后面可能会出现的输出乱码问题

查看C语言的 ODBC API

通过以下头文件访问ODBC API
ODBC API Reference

#include
#include
#include
#include
#include
#include

编写代码

C语言ODBC操作MySQL数据库
如果用这里的代码,需要修改一下才能正常连接
这里mysql32 代表的是数据源名称, root是用户名,123456是密码,需要修改成自己的

#include
#include
#include
#include
#include
#include
#pragma coment(lib, "C:\\Windows\\system32\\odbc32.dll")
#define false 0
#define true 1
#define CON_STR_LEN 255
#define SQL_QUERY_BUFF_SIZE 512

int InitConnect(void);
int main()
{
//    SQLHENV   hEnv = 0;
//    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, & hEnv);
    printf("hello world!\n");
    InitConnect();
    return 0;
}


int InitConnect(void)
{
    SQLHENV   hEnv = 0;
    SQLHDBC   hDBC = 0;
    SQLHSTMT  hStmt = 0;
    SQLRETURN retcode;
    SQLCHAR   szConStr[CON_STR_LEN];
    SQLCHAR   szStmt[SQL_QUERY_BUFF_SIZE];
    INT16     cbConLen;

    // 分配环境句柄  
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);  
    if (retcode != SQL_SUCCESS)  
    {  
        printf("00SQLAllocHandle error!");  
        return -1;  
    }  


    // 设置环境句柄  
    retcode = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);  

    if (retcode != SQL_SUCCESS)
    {
        printf("11SQLSetEnvAttr error!");
        return -2;
    }

    // 分配连接句柄
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
    printf("%hd",retcode);
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO )
    {
        printf("22SQLAllocHandle error!");
        return -3;
    }

    //这里mysql32 代表的是数据源名称, root是用户名,123456是密码,需要修改成自己的
    retcode = SQLConnect(hDBC, (SQLCHAR *)"mysql32", SQL_NTS, (SQLCHAR *)"root",
        SQL_NTS, (SQLCHAR *)"123456", SQL_NTS);

    printf("%hd",retcode);
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
    {
        printf("SQLConnect error!");
        return -4;  
    }
}

链接

在命令行cmd下
使用如下gcc 命令链接
任选一个,并不知道那个是有效的

gcc xxx.c -W "C:\Windows\System32\odbc32.dll" -o xxx.exe
gcc xxx.c -W "C:\Windows\SySWOW64\odbc32.dll" -o xxx.exe

注:gcc命令一般是在安装的集成开发环境的MinGW目录的bin目录下
或者自己安装一个MinGW,然后将C:\MinGW\bin目录加入系统环境变量

运行

在命令行输入xxx.exe
没有错误信息即成功链接

如有侵权,请提示删除

你可能感兴趣的:(数据库)