易语言操作MSSQL,畅快无压力

1. 前言

在编写软件时,经常需要操作数据库,而MSSQL是广泛使用的关系型数据库之一。本文将介绍如何在易语言中操作MSSQL数据库,让开发者可以轻松实现对数据库的增删改查操作。

2. 准备工作

2.1 安装ODBC驱动

首先需要在电脑上安装好MSSQL的ODBC驱动,以便在易语言中访问数据库。具体操作步骤如下:

打开控制面板,找到“Administrative Tools”(管理工具)并点击进入。

双击打开“Data Sources (ODBC)”(数据源(ODBC))。

切换到“System DSN”(系统数据源)选项卡,并点击“Add”(添加)按钮。

选择“SQL Server”(SQL服务器),然后点击“Finish”(完成)。

填写连接信息,例如服务器名称、登录信息等,最后点击“Test Data Source”(测试数据源)按钮来测试是否连接成功。

2.2 引用ODBC库

在易语言中要操作ODBC驱动,需要引用ODBC库。具体操作步骤如下:

    打开易语言IDE,点击“工程”→“库引用”→“ODBC”。

    在弹出的提示框中,确认“odbc.h”和“odbc32.lib”文件已经存在于计算机中。

    点击“确定”完成库引用。

    3. 连接数据库

    连接数据库是操作数据库的第一步,实现连接需要以下几个步骤:

    定义ODBC连接信息结构体。

    初始化ODBC连接信息。

    连接数据库。

    判断连接是否成功。

    下面是连接数据库的代码示例:

    #include "odbc.h" // 引用ODBC库

    // 定义ODBC连接信息结构体

    struct ODBCInfo {

    char* server; // 服务器名称

    char* username; // 登录用户名

    char* password; // 登录密码

    char* database; // 数据库名称

    SQLHENV henv; // ODBC环境句柄

    SQLHDBC hdbc; // ODBC连接句柄

    };

    // 初始化ODBC连接信息

    void InitODBCInfo(struct ODBCInfo *info) {

    info->henv = NULL;

    info->hdbc = NULL;

    info->server = "localhost";

    info->username = "sa";

    info->password = "123456";

    info->database = "test";

    }

    // 连接数据库

    BOOL ConnectDatabase(struct ODBCInfo *info) {

    SQLRETURN ret; // ODBC连接执行结果

    SQLCHAR connStr[1024]; // 连接字符串

    SQLSMALLINT connStrLen; // 连接字符串长度

    // 初始化ODBC环境句柄

    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &info->henv);

    if (!SQL_SUCCEEDED(ret)) {

    return FALSE;

    }

    // 设置ODBC版本

    ret = SQLSetEnvAttr(info->henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

    if (!SQL_SUCCEEDED(ret)) {

    return FALSE;

    }

    // 初始化ODBC连接句柄

    ret = SQLAllocHandle(SQL_HANDLE_DBC, info->henv, &info->hdbc);

    if (!SQL_SUCCEEDED(ret)) {

    return FALSE;

    }

    // 构建连接字符串

    connStrLen = sprintf_s((char*)connStr, sizeof(connStr), "DRIVER={SQL Server}; SERVER=%s; DATABASE=%s; UID=%s; PWD=%s;", info->server, info->database, info->username, info->password);

    // 连接数据库

    ret = SQLDriverConnect(info->hdbc, NULL, connStr, connStrLen, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);

    if (!SQL_SUCCEEDED(ret)) {

    return FALSE;

    }

    return TRUE;

    }

    // 判断连接是否成功

    BOOL IsConnected(struct ODBCInfo *info) {

    SQLRETURN ret; // ODBC执行结果

    SQLINTEGER status; // 连接状态

    ret = SQLGetConnectAttr(info->hdbc, SQL_ATTR_CONNECTION_DEAD, &status, 0, NULL);

    if (!SQL_SUCCEEDED(ret) || status == SQL_CD_TRUE) {

    return FALSE;

    }

    return TRUE;

    }

    在上面的代码中,首先定义了ODBC连接信息结构体,“InitODBCInfo”函数用于初始化连接信息。在“ConnectDatabase”函数中,首先调用“SQLAllocHandle”函数初始化了ODBC环境句柄,然后通过“SQLSetEnvAttr”函数设置ODBC版本,接着初始化ODBC连接句柄,然后构建连接字符串,并使用“SQLDriverConnect”函数连接数据库。最后,通过“IsConnected”函数判断连接是否成功。

    4. 操作数据库

    4.1 查询数据

    要查询数据库中的数据,可以使用“SQLExecDirect”函数执行SELECT语句,并将返回的结果存储到ODBC结果集中,然后通过“SQLFetch”函数逐条读取结果集中的数据。以下是查询数据的示例代码:

    // 查询数据

    void QueryData(struct ODBCInfo *info) {

    SQLRETURN ret; // ODBC执行结果

    SQLHSTMT hstmt; // ODBC语句句柄

    SQLCHAR sqlCmd[1024]; // SQL查询语句

    SQLINTEGER id; // ID号

    SQLCHAR name[100]; // 姓名

    SQLLEN idLen, nameLen; // ID号和姓名的长度

    // 构建SQL查询语句

    sprintf_s((char*)sqlCmd, sizeof(sqlCmd), "SELECT ID,NAME FROM USER");

    // 执行SQL查询语句

    ret = SQLExecDirect(info->hstmt, sqlCmd, SQL_NTS);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    // 逐条读取ODBC结果集中的数据

    while (SQLFetch(info->hstmt) == SQL_SUCCESS) {

    ret = SQLGetData(info->hstmt, 1, SQL_C_LONG, &id, sizeof(id), &idLen);

    ret = SQLGetData(info->hstmt, 2, SQL_C_CHAR, name, sizeof(name), &nameLen);

    printf("ID=%d, Name=%s\n", id, name);

    }

    }

    在上面的代码中,首先构建了一个SQL查询语句,并使用“SQLExecDirect”函数执行SELECT语句,然后使用“SQLFetch”函数逐条读取ODBC结果集中的数据,并通过“SQLGetData”函数获取每条记录中的ID号和姓名信息。

    4.2 插入数据

    要在数据库中插入数据,可以使用“SQLPrepare”函数准备一条插入语句,然后使用“SQLBindParameter”函数绑定参数,并使用“SQLExecute”函数执行插入语句。以下是插入数据的示例代码:

    // 插入数据

    void InsertData(struct ODBCInfo *info, int id, const char* name) {

    SQLRETURN ret; // ODBC执行结果

    SQLHSTMT hstmt; // ODBC语句句柄

    SQLCHAR sqlCmd[1024]; // SQL插入语句

    SQLINTEGER idValue = id; // ID号

    SQLCHAR nameValue[100]; // 姓名

    SQLLEN nameLen; // 姓名的长度

    // 构建SQL插入语句

    sprintf_s((char*)sqlCmd, sizeof(sqlCmd), "INSERT INTO USER(ID,NAME) VALUES(?,?)");

    // 准备SQL插入语句

    ret = SQLPrepare(info->hstmt, sqlCmd, SQL_NTS);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    // 绑定参数

    ret = SQLBindParameter(info->hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &idValue, 0, NULL);

    ret = SQLBindParameter(info->hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,

    sizeof(nameValue), 0, (SQLPOINTER)name, sizeof(name), &nameLen);

    // 执行SQL插入语句

    ret = SQLExecute(info->hstmt);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    }

    在上面的代码中,首先构建了一个SQL插入语句,并使用“SQLPrepare”函数准备插入语句,然后使用“SQLBindParameter”函数绑定插入语句中的参数,并最终使用“SQLExecute”函数执行插入语句。

    4.3 更新数据

    要更新数据库中的数据,可以使用“SQLPrepare”函数准备一条更新语句,然后使用“SQLBindParameter”函数绑定参数,并使用“SQLExecute”函数执行更新语句。以下是更新数据的示例代码:

    // 更新数据

    void UpdateData(struct ODBCInfo *info, int id, const char* name) {

    SQLRETURN ret; // ODBC执行结果

    SQLHSTMT hstmt; // ODBC语句句柄

    SQLCHAR sqlCmd[1024]; // SQL更新语句

    SQLINTEGER idValue = id; // ID号

    SQLCHAR nameValue[100]; // 姓名

    SQLLEN nameLen; // 姓名的长度

    // 构建SQL更新语句

    sprintf_s((char*)sqlCmd, sizeof(sqlCmd), "UPDATE USER SET NAME=? WHERE ID=?");

    // 准备SQL更新语句

    ret = SQLPrepare(info->hstmt, sqlCmd, SQL_NTS);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    // 绑定参数

    ret = SQLBindParameter(info->hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,

    sizeof(nameValue), 0, (SQLPOINTER)name, sizeof(name), &nameLen);

    ret = SQLBindParameter(info->hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &idValue, 0, NULL);

    // 执行SQL更新语句

    ret = SQLExecute(info->hstmt);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    }

    在上面的代码中,首先构建了一个SQL更新语句,并使用“SQLPrepare”函数准备更新语句,然后使用“SQLBindParameter”函数绑定更新语句中的参数,并最终使用“SQLExecute”函数执行更新语句。

    4.4 删除数据

    要在数据库中删除数据,可以使用“SQLPrepare”函数准备一条删除语句,然后使用“SQLBindParameter”函数绑定参数,并使用“SQLExecute”函数执行删除语句。以下是删除数据的示例代码:

    // 删除数据

    void DeleteData(struct ODBCInfo *info, int id) {

    SQLRETURN ret; // ODBC执行结果

    SQLHSTMT hstmt; // ODBC语句句柄

    SQLCHAR sqlCmd[1024]; // SQL删除语句

    SQLINTEGER idValue = id; // ID号

    // 构建SQL删除语句

    sprintf_s((char*)sqlCmd, sizeof(sqlCmd), "DELETE FROM USER WHERE ID=?");

    // 准备SQL删除语句

    ret = SQLPrepare(info->hstmt, sqlCmd, SQL_NTS);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    // 绑定参数

    ret = SQLBindParameter(info->hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &idValue, 0, NULL);

    // 执行SQL删除语句

    ret = SQLExecute(info->hstmt);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    }

    在上面的代码中,首先构建了一个SQL删除语句,并使用“SQLPrepare”函数准备删除语句,然后使用“SQLBindParameter”函数绑定删除语句中的参数,并最终使用“SQLExecute”函数执行删除语句。

    5. 断开连接

    在完成对数据库的操作后,需要断开和数据库的连接。可以使用“SQLDisconnect”函数断开连接,并使用“SQLFreeHandle”函数释放ODBC环境句柄和连接句柄。以下是断开连接的示例代码:

    // 断开连接

    void Disconnect(struct ODBCInfo *info) {

    SQLRETURN ret; // ODBC执行结果

    // 断开连接

    ret = SQLDisconnect(info->hdbc);

    if (!SQL_SUCCEEDED(ret)) {

    return;

    }

    // 释放ODBC环境句柄和连接句柄

    SQLFreeHandle(SQL_HANDLE_DBC, info->hdbc);

    SQLFreeHandle(SQL_HANDLE_ENV, info->henv);

    }

    6. 总结

    操作MSSQL数据库是一个非常常见的任务,这篇文章介绍了在易语言中如何操作MSSQL数据库。代码示例中包含了连接数据库、查询数据、插入数据、更新数据以及删除数据等操作,这些操作涵盖了数据库的基本操作需求。希望这篇文章能帮助易语言开发者更好地操作MSSQL数据库。

数据库标签