VS2015 连接、查询SqlServer/_variant_t 与 std::string 相互转换

以下代码在vs2015中测试通过,使用标准Windows库。
连接SqlSerer和查询的代码是东拼西凑的,_variant_t 与 std::string 相互转换是自己翻书写的。
_variant_t 如果是日期、整数等其他数据类型,会自动转成std::string,没有乱码。
20200614更新,做了连接、增删改查、断开部分注释。

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

#include "stdafx.h"
#include <ICRSINT.H>
#include <vector>
#include <iostream>
#include <String>
#import "c:\Program Files\Common Files\System\ADO\msado15.dll"  no_namespace rename("EOF", "adoEOF")

int main()
{
	std::vector<std::string> v_strvalvec;//用来放查询结果
	//初始化部分begin
	CoInitialize(NULL);
	_ConnectionPtr  sqlSp;
	HRESULT hr = sqlSp.CreateInstance(_uuidof(Connection));
	if (FAILED(hr))
	{
		std::cout<<"_ConnectionPtr对象指针实例化失败!!!";
		system("pause");
		return 0;
	}
	else {
		std::cout << "ok";
	}
	try {
		_bstr_t strConnect = "Driver={sql server};server=127.0.0.1;uid=root;pwd = root;database=testdb;";
		sqlSp->Open(strConnect, "", "", adModeUnknown);
		if (sqlSp == NULL)
			printf("conn error");
		printf("conn ok");
	}
	catch (_com_error &e)
	{
		std::cout<<(e.Description());
		system("pause");
		return 0;
	}
	//初始化部分end
	//增删改查begin
	_RecordsetPtr m_pRecordset;
	if (FAILED(m_pRecordset.CreateInstance(_uuidof(Recordset))))
	{
		std::cout << ("记录集对象指针实例化失败!");
	}
	try {
		//std::string 转 _variant_t begin
		std::string std_sqlstr = "select * from testTable";
		char* c_sqlstr = const_cast<char*>(std_sqlstr.c_str());
		_variant_t v_sqlstr = (LPSTR)c_sqlstr;
		//std::string 转 _variant_t end

		m_pRecordset->Open(v_sqlstr, (IDispatch*)sqlSp, adOpenDynamic, adLockOptimistic, adCmdText);

		while(!m_pRecordset->adoEOF)//遍历所有记录  
		{		
			_variant_t TheValue;
			TheValue = m_pRecordset->GetCollect("test");

			//_variant_t转std::string begin
			std::string strval = (char*)(_bstr_t)TheValue;
			//_variant_t转std::string end

			v_strvalvec.push_back(strval);
			m_pRecordset->MoveNext();
		}
		for (int i = 0; i < v_strvalvec.size(); i++) {
			std::string item = v_strvalvec.at(i);
			std::cout <<std::endl << item;
		}
	}
	catch (_com_error &e)
	{
		std::cout << (e.Description());
	}
	//增删改查end
	//断开begin
	sqlSp->Close();
	 ::CoUninitialize();
	//断开end
	system("pause");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值