c odbc sqlserver 增删查改
时间: 2024-06-13 15:07:11 浏览: 189
CEMS.rar_CEMS_MFC sql_MFC增删改查_mfc sql增删改查_sql MFC
以下是使用C语言通过ODBC操作SQL Server数据库实现增删查改的示例代码:
1.连接数据库
```c
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// 分配环境句柄
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
// 设置环境属性
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
// 分配连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
// 连接数据库
ret = SQLConnect(dbc, (SQLCHAR*)"your_server_name", SQL_NTS, (SQLCHAR*)"your_user_name", SQL_NTS, (SQLCHAR*)"your_password", SQL_NTS);
// 执行增删查改操作
// 断开连接
SQLDisconnect(dbc);
// 释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
// 释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
```
2.插入数据
```c
// 假设表名为contacts,字段名为name、gender、phone
char* name = "木木";
char* gender = "男";
char* phone = "202100020";
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// 准备SQL语句
ret = SQLPrepare(stmt, (SQLCHAR*)"insert into contacts values (?, ?, ?)", SQL_NTS);
// 绑定参数
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, name, 0, NULL);
ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, gender, 0, NULL);
ret = SQLBindParameter(stmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, phone, 0, NULL);
// 执行SQL语句
ret = SQLExecute(stmt);
// 释放语句句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
```
3.查询数据
```c
// 假设要查询所有联系人的姓名和电话
SQLCHAR name[50], phone[50];
SQLLEN name_len, phone_len;
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// 准备SQL语句
ret = SQLPrepare(stmt, (SQLCHAR*)"select name, phone from contacts", SQL_NTS);
// 执行SQL语句
ret = SQLExecute(stmt);
// 绑定结果集
ret = SQLBindCol(stmt, 1, SQL_C_CHAR, name, sizeof(name), &name_len);
ret = SQLBindCol(stmt, 2, SQL_C_CHAR, phone, sizeof(phone), &phone_len);
// 遍历结果集
while (SQLFetch(stmt) == SQL_SUCCESS) {
printf("name: %s, phone: %s\n", name, phone);
}
// 释放语句句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
```
4.更新数据
```c
// 假设要将姓名为“木木”的联系人的电话号码改为“202100021”
char* name = "木木";
char* phone = "202100021";
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// 准备SQL语句
ret = SQLPrepare(stmt, (SQLCHAR*)"update contacts set phone = ? where name = ?", SQL_NTS);
// 绑定参数
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, phone, 0, NULL);
ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, name, 0, NULL);
// 执行SQL语句
ret = SQLExecute(stmt);
// 释放语句句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
```
5.删除数据
```c
// 假设要删除姓名为“木木”的联系人
char* name = "木木";
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// 准备SQL语句
ret = SQLPrepare(stmt, (SQLCHAR*)"delete from contacts where name = ?", SQL_NTS);
// 绑定参数
ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, name, 0, NULL);
// 执行SQL语句
ret = SQLExecute(stmt);
// 释放语句句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
```
阅读全文