c++从SQL SERVER中读写数据、删除数据

初学SQL--c++ SQL SERVER 数据库读写

代码都是网上一些大神写好的,汇总一下,形成一个从原理到应用的完整的流程,对于初学数据库的人有一定的借鉴意义。

一:背景知识

(1)ODBC(Open Database Connectivity)即开放数据库互连,提供一组对数据库访问的标准API(应用程序接口),而且其本身也提供对SQL语言的支持,他的理念是能够提供“桥”让用户连接各种不同的数据源,用户通过其提供的接口就可以访问数据库了、

(2)ADO(ActiveX Data Objects)是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据,可通过ADO对象和ADO的附加组件来创建或者修改表和查询、检验数据库或者访问外部数据源,还可以在代码中使用ADO来操作数据库中的数据。

ADO的对象和说明:

c++从SQL SERVER中读写数据、删除数据_第1张图片

ADO接口:

c++从SQL SERVER中读写数据、删除数据_第2张图片


(3)OLEDB是承认你关系与数据源进行交互的DLL,可以连接各种数据源,包括SQL SERVER、ORACLE、ACCESS、活动目录等等。

二:环境:VS2010  , SQL SERVER 2012  

1:控制面板-管理工具-数据源(ODBC)-系统DSN-添加-选择SQL Server-任意命名和描述,选择本机服务器-(如:XXX-PC)

--使用用户输入登录ID和密码的SQL Server的访问,登录ID和密码都必须有,一般为sa,sa-然后选择更改默认的数据库为-(选择你使用的数据库)

点击完成--测试一下,能通过就可以了。

2:在SQL 2012中新建立一个数据库student,并创建一个表stu_info ,字段和取值如下:

c++从SQL SERVER中读写数据、删除数据_第3张图片

3:打开VS2010,新建控制台程序,创建工程的时候记得加预编译头。

4:代码如下:

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

#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "windows.h"
using namespace std;
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")

class STU
{
public:
	char snum[10]; //学号 
	char sname[10]; //姓名 
	char ssex[2]; //姓别 
	long sage; //年龄 
	char smajor[20]; //专业 
public:
	STU(){}
	~STU(){}
};

int _tmain(int argc, _TCHAR* argv[])
{
	STU student;
	::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
	_RecordsetPtr m_pRecordset("ADODB.Recordset");
	_ConnectionPtr m_pConnection("ADODB.Connection");
	_bstr_t bstrSQL("select * from stu_info");   //SQL 查询语句
	char* query_cmd="DELETE FROM stu_info WHERE sname='本拉登'";
	try
	{
		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=student;uid=sa;pwd=sa;";
		m_pConnection->Open(strConnect,"","",adModeUnknown);
		if (m_pConnection==NULL)
		{
			cerr<<"Lind 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));//这儿给字段编号和字段名都可以 
			vsname = m_pRecordset->GetCollect("sname");
			vsage = m_pRecordset->GetCollect("sage");
			vssex = m_pRecordset->GetCollect("ssex");
			vsmajor = m_pRecordset->GetCollect("smajor");
			if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
				&& vssex.vt != VT_NULL && vsmajor.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)vssex;
					cout <MoveNext(); ///移到下一条记录
		}
			cout << "\n----------------------------------------------------------------\n";
			cout << "\n请输入你要添加的学生信息\n"; 
			cout << "学号:";
			cin >> student.snum;
			cout << "\n姓名:";
			cin >> student.sname;
			cout<< "\n年龄:";
			cin >> student.sage; 
			cout << "\n姓别:";
			cin >> student.ssex;
			cout << "\n专业:";
			cin >> student.smajor;
			m_pRecordset->MoveFirst(); //移动到第一条记录
			m_pRecordset->AddNew(); ///添加新记录
			m_pRecordset->PutCollect("snum",_variant_t(student.snum));
			m_pRecordset->PutCollect("sname",_variant_t(student.sname));
			m_pRecordset->PutCollect("sage",_variant_t(student.sage));
			m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
			m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
			m_pRecordset->Update();

			m_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;
}


5:代码亲测,可以使用。


你可能感兴趣的:(SQL,Server,C++)