SQL SEVER数据更新

本文介绍了一个使用ODBC进行数据库更新操作的C++示例程序。该程序演示了如何通过环境句柄、连接句柄及语句句柄来完成数据库连接及更新操作。具体步骤包括:分配并设置环境句柄、分配连接句柄、连接指定数据库、分配语句句柄,并最终执行SQL更新语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// Update_SQL.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"//在此文件里面包含以下头文件
//#include <stdio.h>
//#include <tchar.h>
//
//
//
//
 TODO: reference additional headers your program requires here
//#include <windows.h>
//#include <sqlext.h>   //在包含此头文件之前须包含windows.h因为sql.h引用了一些windows.h中定义的一些方法
//通常如果用UNICODE连接会失败
int _tmain(int argc, _TCHAR* argv[])
{
	SQLHENV hEnv;     //环境句柄
	SQLHDBC hDbc;	  //连接句柄
	SQLHSTMT hStmt;   //语句句柄
	SQLRETURN retCode;  //返回值

	//分配环境句柄
	//分配环境句柄第二个参数必须为SQL_NULL_HANDLE
	retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);   
	if(retCode != SQL_SUCCESS){
		printf_s("分配环境句柄失败!\n\n");
		return 1;
	}

	//设置版本
	retCode = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,
							(void*)SQL_OV_ODBC3, 0);

	if(retCode != SQL_SUCCESS){
		printf_s("设置版本失败!\n\n");
		return 1;
	}

	 //分配连接句柄
	//分配连接句柄第二个参数必须为环境句柄
	retCode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);   
	if(retCode != SQL_SUCCESS){
		printf_s("分配连接句柄失败!\n\n");
		return 1;
	}

	//连接数据库
	//(SQLWCHAR*)"test"为数据源
	//(SQLWCHAR*)"sa"用户名
	//(SQLWCHAR*)"holyshit"用户密码
	//连接之前可以调用SQLSetConnnectAttr设置连接属性
	retCode = SQLConnect(hDbc, (SQLCHAR*)"test", SQL_NTS,
						(SQLCHAR*)"sa", SQL_NTS,
						(SQLCHAR*)"holyshit", SQL_NTS);

	if(retCode != SQL_SUCCESS &&
		retCode != SQL_SUCCESS_WITH_INFO){
			printf_s("连接数据库失败\n\n");
			return 1;
	}

	//分配语言句柄
	//分配语句句柄第二个参数须为连接句柄
	retCode = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);	//
	if(retCode != SQL_SUCCESS){
		printf_s("分配语句句柄失败\n\n");
		return 1;
	}

	//执行更新语句
	retCode = SQLExecDirect(hStmt, (SQLCHAR*)"UPDATE Users \
											  SET Name = '黄贵林' \
											  WHERE ID = 1", SQL_NTS);
	//如果执行有错则查看诊断记录
	if(retCode != SQL_SUCCESS &&
		retCode != SQL_SUCCESS_WITH_INFO){
			SQLCHAR szwSqlState[6];
			SQLINTEGER nErrorCode;
			SQLCHAR szErrorMsg[SQL_MAX_MESSAGE_LENGTH];
			int i = 1;
			
			while (SQLGetDiagRec(SQL_HANDLE_STMT, hStmt, 
				i, szwSqlState, &nErrorCode, szErrorMsg,
				sizeof(szErrorMsg), NULL)){
					printf_s("Error: %s\n", szErrorMsg);
					i++;
			}
	}

	
	SQLDisconnect(hDbc);	//断开连接
	SQLFreeHandle(SQL_HANDLE_ENV, hEnv);	//释放句柄
	SQLFreeHandle(SQL_HANDLE_DBC, hDbc);    //释放句柄
	SQLFreeHandle(SQL_HANDLE_STMT, hStmt);  //释放句柄


	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值