纯C++ 连接SQL Server2005 数据库读写操作的小例子

 

一个测试c++链接 sql server 数据库的例子
// 数据库说明
// 数据库用户为 sa , 密码为 空
// 数据库为 MyDB
// 表为 UserInfo
// 表字段为 Name 、 PassWd 、ID

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

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

int _tmain(int argc, _TCHAR* argv[])
{
// 初始化COM接口
CoInitialize(NULL);

// _RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作
_RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象

// _ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
_ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象

try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");

// 设置连接字符串,若数据库在网络上则Server为形如(192.168.253.253,3340)
_bstr_t strConnect = "Provider=SQLOLEDB; Server=Localhost; Database=MyDB; uid=sa; pwd=;";

// 建立与服务器连接
m_pConnection->Open(strConnect,"","",adModeUnknown);
if (m_pConnection ==NULL)
{
cerr<<"Lind data ERROR!\n";
}

m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象

//取得表中的记录
_bstr_t bstrSQL("select *from UserInfo");//查询语句
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

_variant_t vsnum, vsName,vsPassWd, vsID,vsmajor;//对应库中的snum,sname,sage,ssex,smajor

cout<<"姓名 密码 ID\n";
cout<<"-------------------------------------------\n";

while (!m_pRecordset->EndOfFile)
{
vsName= m_pRecordset->GetCollect("Name");
vsPassWd= m_pRecordset->GetCollect("PassWd");
vsID= m_pRecordset->GetCollect("ID");

if (vsnum.vt !=VT_NULL && vsName.vt !=VT_NULL&& vsPassWd.vt!=VT_NULL && vsID.vt != VT_NULL&& vsmajor.vt!=VT_NULL)
{
cout.setf(ios::left);
cout<<setw(14) <<(char*)(_bstr_t)vsName;
cout<<setw(14) <<(char*)(_bstr_t)vsPassWd;
cout<<setw(14) <<(char*)(_bstr_t)vsID;
cout.unsetf(ios::left);
cout<<endl;
}

//移动下一条记录
m_pRecordset->MoveNext();
}

cout<<"\n------------------------------------------\n";

//用Execute执行sql语句来创建表
m_pConnection->Execute("CREATE TABLE Employee(EmID INTEGER,EmName TEXT,EmAge INTEGER,EmBirthday DATETIME)", NULL, adCmdText);

m_pRecordset->Close();//关闭记录集
}
catch (_com_error e)
{
e.Description();//抛出异常
}

if (m_pConnection->State)
{
m_pConnection->Close();
}

::CoUninitialize();
return 0;
}

posted @ 2014-02-10 15:34  私念之泪  Views(646)  Comments(0Edit  收藏  举报