您的位置:首页 > 数据库

Visual C++使用ADO操作SQL最精简例子代码

2013-09-19 12:29 274 查看
已经不使用Visual C++多年了,最近应邀为朋友修改一个现存的VC++操作SQL Server2000的老程序,所以重新回顾了一下基本的代码格式。发布到这里,以便于以后再用到时迅速复习。

1 头文件stdafx.h

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"
#define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息
// Windows 头文件:
#include <windows.h>
// C 运行时头文件
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>

// TODO: 在此处引用程序需要的其他头文件
#import "C:/Program Files (x86)/Common Files/System/ado/msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "FirstOfFile")



2 实现文件adocpp.cpp

// ADOCPP.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

_ConnectionPtr pConnection;
_CommandPtr pCmd;
_RecordsetPtr pRecord;

int _tmain(int argc, _TCHAR* argv[])
{
	CoInitialize(NULL);
	try
	{
		HRESULT hr;
		//创建连接实例
		hr = pConnection.CreateInstance("ADODB.Connection");
		if(SUCCEEDED(hr))
		{
			//连接数据库
			_bstr_t connectStr = "Provider=SQLOLEDB;Data Source=服务器IP;Initial Catalog=数据库名;User ID=用户名;Password=密码";
			hr = pConnection->Open(connectStr, "", "", adModeUnknown);

			_variant_t vAffected;
			_bstr_t sql;

			//执行查询
			pRecord = pConnection->Execute("select top 10 * from 表名", &vAffected, adCmdText);

			//枚举查询结果集
			_TCHAR buffer[100];
			_variant_t vID;
			_variant_t vTitle;
			while(!pRecord->adoEOF)
			{
				vID = pRecord->GetCollect(_variant_t((long)0));  //按照序号取列值
				vTitle = pRecord->GetCollect("列名");			 //按照列名称取列值
				if(vID.vt != NULL){
					wsprintf(buffer, _T("%d-%s\r\n"), vID.intVal, (LPCWSTR)(_bstr_t)vTitle);             //整数,字符串
					wprintf(buffer);
				}
				pRecord->MoveNext();
			}

			//执行更新(如果影响行数为0, 不会抛出异常)
			sql = "update lyb set name='hello' where ID=3";
			pConnection->Execute(sql, &vAffected, adCmdText);

			//执行插入
			sql = "insert into 表名(name, neirong) values('test', 'test')";
			pConnection->Execute(sql, &vAffected, adCmdText);

			//执行删除(如果影响行数为0, 不会抛出异常)
			sql = "delete from lyb where id=20";
			pConnection->Execute(sql, &vAffected, adCmdText);

			wsprintf(buffer, _T("%d"), vAffected.intVal);
			wprintf(buffer);

			//关闭连接和结果集
			pRecord->Close();
			pConnection->Close();
		}
		else
		{
			printf("ADO组件加载失败");
		}
		CoUninitialize();
	}
	catch(_com_error e) //SQL系统报错(如语法错误、违反约束),才会产生异常,用户程序逻辑问题,要根据影响行数来判定
	{
		MessageBox(NULL,e.Description(), _T("异常"), MB_OK);
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: