vs操作sql server

1.安装sql server,然后安装ssms(Microsoft SQL Server Management Studio),这是可视化操作数据库的界面。在安装时创建账户sa
如果出现连接不上:https://jingyan.baidu.com/article/154b46310e5c1f28ca8f411f.html
2.用ssms创建表格,在VS中代码如下:
1.添加头文件

#include "windows.h"
#include <tchar.h>

using namespace std;
#import"C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","EndOfFile")

msado15.dl可能会报错,早不到某些文件,不用管,直接编译,编译后会产生需要的文件。
2.这是别人的源码

int main()
{
	STU student;
	::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
	_RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象
	_ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象
	_bstr_t bstrSQL("select * from facedata");   //SQL 查询语句
	// char* query_cmd ="DELETE FROM stu_info WHERE sname='s'";
	try//try catch  用于抛出异常
	{
		m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		//设置连接字符串 必须是BSTR or _bstr_ 类型 uid  和 pwd  账户和密码可以自己设置
		//如果数据库在网上,则Server形如(192.168.1.5.3340)
		//server=(local):数据库服务器的地址,如果server的值为(local),表示是当前电脑; 
		//UID=sa:数据库的用户名是sa;pwd=sa:数据库的密码是sa;
		//database=student:数据库的库名是student;
		//Provider=SQLOLEDB 数据库采用SQL的方式连接
		_bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=facedata;uid=sa;pwd=(密码);";
		m_pConnection->Open(strConnect, "", "", adModeUnknown);//建立连接
		if (m_pConnection == NULL)
		{
			cerr << "Load data ERROR!\n";
		}
		//创建记录集
		m_pRecordset.CreateInstance(_uuidof(Recordset));
		//取得表中的记录
		m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);//连接表格
		_variant_t vsnum, vsname, vsage, vssex, vsmajor; //对应库中的snum,sname,sage,ssex,smajor
		cout << "学号姓名";
		cout << "\n-------------------------------------------\n";
		while (!m_pRecordset->EndOfFile)

		{
			vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以 取第一列的值,从0开始
			vsname = m_pRecordset->GetCollect("facenum");//这是第一列,和上面输出一样
			vsage = m_pRecordset->GetCollect("facedata");
			if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL)
			{
				cout.setf(ios::left);//设置格式
				cout << setw(14) << (char*)(_bstr_t)vsnum;
				cout << setw(14) << (char*)(_bstr_t)vsname;
				//cout << setw(8) << vsage.lVal;
				cout << setw(8) << (char*)(_bstr_t)vsage;
				//cout << setw(20) << (char*)(_bstr_t)vsmajor;
				cout.unsetf(ios::left);//取消已设置的格式
				cout << endl;
			}
			m_pRecordset->MoveNext(); ///移到下一条记录
		}
		cout << "\n----------------------------------------------------------------\n";
		cout << "\n请输入你要添加的学生信息\n";
		cout << "姓名:";
		cin >> student.snum;
		cout << "\n代号:";
		cin >> student.sname;
		m_pRecordset->MoveFirst(); //移动到第一条记录
		m_pRecordset->AddNew(); ///添加新记录
		m_pRecordset->PutCollect("facenum", _variant_t(student.snum));
		m_pRecordset->PutCollect("facedata", _variant_t(student.sname));
		m_pRecordset->Update();//保存数据

		// bm_pConnection->Execute(query_cmd, NULL, 1); //用Execute执行sql语句来删除
		m_pRecordset->Close(); // 关闭记录集
	}
	// 捕捉异常
	catch (_com_error c)
	{
		cerr << "\nERROR:" << (char*)c.Description();
	}
	if (m_pConnection->State)
		m_pConnection->Close();

	::CoUninitialize();//反初始化

	return 0;
}

3.这是使用ADO保存二进制文件时写的,存数据成功,读数据失败(数据指unsinged char),char,int是成功的。

void ado()
{
#import"C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","EndOfFile")
//定义数据库
	::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
	_RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象
	_ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象
	_bstr_t bstrSQL("select * from Table_1");   //SQL 查询语句
	char name[10] = { 0 };//存储姓名
	//存取数据
	try
	{
		cout << "姓名:";
		//cin >> name;
		cout << endl;
		m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		_bstr_t strConnect = "Provider=SQLOLEDB;Server=(local);Database=facedata;uid=sa;pwd=xhl18883779046;";
		m_pConnection->Open(strConnect, "", "", adModeUnknown);//建立连接
		if (m_pConnection == NULL)
		{
			cout << "Load data ERROR!\n";
		}
		//创建记录集
		m_pRecordset.CreateInstance(_uuidof(Recordset));
		//取得表中的记录
		m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);//连接表格

		VARIANT			varBLOB;
		SAFEARRAY		*psa;
		SAFEARRAYBOUND	rgsabound[1];
		m_pRecordset->AddNew(); ///添加新记录
		m_pRecordset->PutCollect("name", _variant_t(name));
		if (copyfeature1.feature)
		{
			rgsabound[0].lLbound = 0;
			rgsabound[0].cElements = copyfeature1.featureSize;
			psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象 
			for (long i = 0; i < (long)copyfeature1.featureSize; i++)
				SafeArrayPutElement(psa, &i, copyfeature1.feature++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中 
			varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组 
			varBLOB.parray = psa; ///为varBLOB变量赋值 
			m_pRecordset->GetFields()->GetItem("data")->AppendChunk(varBLOB);///加入BLOB类型的数据 
		}
		m_pRecordset->Update(); ///保存我们的数据到库中 
		//_variant_t varBLOB1;
		long n = copyfeature1.featureSize;
		varBLOB = m_pRecordset->GetFields()->GetItem("data")->GetChunk(n);
		if (varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正确 
		{
			//char *pBuf = NULL;
			copyfeature1.feature = (MByte *)malloc(lDataSize);//分配内存
			memset(copyfeature1.feature, 0, lDataSize);//数组全为0
			SafeArrayAccessData(varBLOB.parray, (void **)&copyfeature2.feature); ///得到指向数据的指针 
			SafeArrayUnaccessData(varBLOB.parray);
			SafeArrayDestroy(varBLOB.parray);
		}
		m_pRecordset->Update();
		m_pRecordset->Close(); // 关闭记录集

	}
	// 捕捉异常
	catch (_com_error c)
	{
		cerr << "\nERROR:" << (char*)c.Description() << endl;
	}
	if (m_pConnection->State)
		m_pConnection->Close();

	::CoUninitialize();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值