C语言如何连接数据库

在网上找了很多的资料,但好像大多都是用C++语言连接数据库的,因为上面的头文件都是include没有include<studio.h>

可以用odbc
从微软官网下载odbc的sdk
里面有sql.h sqlext.h

假设有access数据库db.mdb,有表 table1,有字段 int id, nvarchar(10) name,用C语言odbc,将1,"zhangsan"插入
给你写了几行代码

#include <sql.h>
#include <sqlext.h>

int main() {
    SQLHENV henv;   //环境句柄
    SQLHDBC hdbc;   //连接句柄
    SQLHSTMT hstmt; //语句句柄
    SQLRETURN ret;  //函数返回值

    //1.初始化环境句柄
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

    //2.初始化连接句柄
    ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    ret = SQLConnect(hdbc, (SQLWCHAR *)L"", SQL_NTS, (SQLWCHAR *)L"", SQL_NTS, NULL, NULL);

    //3.初始化语句句柄
    ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

    //4.执行插入操作
    SQLCHAR *sql = "INSERT INTO table1 (id, name) VALUES (1, 'zhangsan')";
    ret = SQLExecDirectA(hstmt, sql, SQL_NTS);

    //5.释放资源
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);

    return 0;
}

使用相应的API来连接数据库,具体的API函数取决于使用的数据库类型。如Oracle的OCI(Oracle Call Interface)库#include <oci.h>,MySQL的C API(libmysqlclient)库#include <mysql.h>。

mysql安装目录下有头文件的

img

  • 这篇博客: C++类中使用前置声明和使用include包含头文件的感想中的 有些情况不能用前置声明代替#include 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 比如Task1.h改成

    class Date;  
    class Task1 {  
    public:  
        Date d;  
    }; 

    会编译错误,因为Date d定义了一个Date类型变量,编译器为d分配内存空间的时候必须知道d的大小,必须包含定义Date类的Date.h文件。
    这是可以采用指针来代替

    class Date;  
    class Task1 {  
    public:  
        Date *d;  
    }; 

    指针的大小是固定的。在32位机上是4字节,64位机上是8字节。这时编译Task1的时候不需要Date的大小,所以和Date的定义无关。